Bonjour,
je souhaite stocker plusieurs objets mais je ne sais pas comment faire.
J'ai vu qu'il existait les templates mais je ne suis pas sur d'avoir tout compris.
En fait je souhaite stocker le contenu d'un fichier ini.
Amicalement,
Mosco
Version imprimable
Bonjour,
je souhaite stocker plusieurs objets mais je ne sais pas comment faire.
J'ai vu qu'il existait les templates mais je ne suis pas sur d'avoir tout compris.
En fait je souhaite stocker le contenu d'un fichier ini.
Amicalement,
Mosco
tu veux stocker dans koi??
je ne connais pas tous les choix possibles mais il me semble que "map" sait le faire.
Le problème c'est que je ne comprends pas tout (c'est assez nouveau pour moi:? ).
J'ai regardé dans la FAQ mais cela m'aide pas plus.
Il faut que tu nous dises ce que tu veux stocker, et comment tu veux y accéder.
le choix du conteneur le plus approprié va dépendre tres directement de l'utilisation que tu vas en faire.Citation:
Envoyé par MoscoBlade
a toi de savoir si déja tu veux une liste brute/triée, ou un tableau associatif.
si tu veux un tableau associatif, std::map<> te permet d'avoir à une clé unique une valeur associée.
si tu veux une liste, a voir quelle utilisation tu vas en faire. plutot FIFO ou LIFO ? ensuite, tes acces seront plutot "random" ou plutot "toujours a la fin/au début" de cette liste ? tout ceci permettra de choisir entre std::vector<>, std::list<>, std::deque<>...
je souhaite stocké des classes CTest.
j'obterais plus pour un tableau associatif.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class CTest { public : CTest(void); ~CTest(void); public : CString m_name; CString m_str1; CString m_str2; CString m_str3; CString m_str4; int m_nbRecord; }
Sachant que je vais lire un fichier INI puis je stocke ce que j'ai lu (sachant que cela ne peut être que ma classe CTest).
Puis je prends mon stockage et je les insère dans une listBox et d'autres composants.
Je sais pas si c'est bien plus clair ? si je fais le bon choix ?
Mosco.
juste par curiosité, pourquoi tu t'orientes vers une map ?
tu associerais quoi avec quoi ?
Stocker ?
- en mémoire -> les divers conteneurs standard font très bien l'affaire
- sur disque -> on parle de sérialization ; diverses solutions dont boost.serialize
Pour les fichiers de conf et autres options, j'aime bien boost.program_option -- la faute aux bindings entre variables et options comme en perl.
Pour le format .ini plus précisément, il faudra peut être un peu feinter avec boost.program_option
Je m'oriente vers une map car je pourrais faire des recherches par la clé.Citation:
Envoyé par toxcct
Je compte associé le nom correspondant à ma classe et ma classe.
Vous pensez que je fais un mauvais choix ? :?
je compte stocké en mémoire.Citation:
Envoyé par Luc Hermitte
Peux tu me donner des exemples des divers conteneurs que tu parles ? ;)
En fait après mure réflexion je vais choisir la list<> car je n'ai pas vraiment besoin d'avoir une clef.
En fait je n'avais pas compris et assimilé les STL.
Je mettrais Résolu une fois mon travail terminé.
Je vous remercie pour tout.
Mosco.
je te conseille std::vector<> si tu prends un conteneur pour en faire un peu n'importe quoi. c'est encore le template qui offre les meilleures performance en ce sensCitation:
Envoyé par MoscoBlade
ok je vais regarder suivant mon utilité. ;)
Merci.
Autre question ?
Mon appli est composé d'une DLL et d'un EXE.
Dans ma DLL je stocke mes infos ensuite je les utilises dans mon EXE.
Dans ma DLL j'ai la méthode suivante :
J'ai un doute sur ce que je dois retourner ? Sachant que ce doit être listTest.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 list<> CIniFile::ReadAllTest() { list<CTest> listTest; wchar_t *szStr= new wchar_t[1000]; CString nameSection = _T(""); CTest test; int nSizeRet= GetPrivateProfileSectionNames( szStr, 1000, m_IniFile); for (int i=0;i<nSizeRet;i++) { if (szStr[i] == 0) { if (nameSection != _T("TEST")) { test= GetProductInformation(nameSection); if (test.m_Code != _T("")) listTest.push_back(test); } nameSection = _T(""); } else { nameSection+= szStr[i]; } } delete szStr; // return (....); }
Est ce que la déclaration de ma méthode est correct ?
Non, il manque le paramètre du template pour que ça fasse un type.Citation:
Est ce que la déclaration de ma méthode est correct ?
Et comme ça va ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 list<CTest> CIniFile::ReadAllTest() { list<CTest> listTest; wchar_t *szStr= new wchar_t[1000]; CString nameSection = _T(""); CTest test; int nSizeRet= GetPrivateProfileSectionNames( szStr, 1000, m_IniFile); for (int i=0;i<nSizeRet;i++) { if (szStr[i] == 0) { if (nameSection != _T("TEST")) { test= GetProductInformation(nameSection); if (test.m_Code != _T("")) listTest.push_back(test); } nameSection = _T(""); } else { nameSection+= szStr[i]; } } delete szStr; return (listTest); }
Ça semble valide.
Mais bon, autant demander à un compilateur.
retourne list<CTest>
c'ets pas ce que je fais ? :?Citation:
Envoyé par toxcct
évidemment, maintenant que t'as corrigé ton post :PCitation:
Envoyé par MoscoBlade
t'as cru m'avoir, mais t'avais écris list<> ;)