allocation dynamique de vector c++

allocation dynamique de vector c++ - C++ - Programmation

Marsh Posté le 15-04-2014 à 12:14:59    

Bonjour,
 
Ca fait des heures que je suis sur mon problème, j'ai beaucoup cherché, mais je n'arrive pas à le résoudre.. (c'est sûrement évident, pourtant!)
Je dois lire un fichier qui se présente sous une forme de matrice. Les valeurs d'une ligne correspondent aux caractéristiques d'un individu, en fait (une classe Sample est implémentée pour le décrire)  
J'ai donc créé  une classe ReadingFile, dont l'objet est appelé depuis mon main et ReadingFile crée autant d'individus qu'il y a de lignes.
 
Dans ReadingFile.cpp, je lis chaque ligne et place les valeurs dans un vecteur, un vecteur me permet alors de créer un individu.
 
Cependant, si je ne mets pas les vecteurs en attribut de ma classe ReadingFile, les listes de descripteurs de mes individus sont perdues. Mais je ne peux pas prévoir le nombre de vecteurs dont j'aurai besoin, il faut donc que je les crée dynamiquement.
Si j'utilise le même vecteur pour tous les individus, je vais me retrouver avec des individus ayant tous la même liste de descripteurs.
 
sachant que descList c'est:
vector<Descriptor*> descList;
 
Mon petit bout de code c'est:
 
for(...) {/// tant qu'il y a des lignes à lire
 
for(auto incr: descValues){ // ici je lis terme à terme chaque ligne
                            descList.push_back(readDescriptor(incr, descName[wordCount], linesCount)); // je traite le type de donnée que j'ai et j'ajoute le descripteur dans la liste
                            sstm << sampleCount; // c'est le numéro de mon individu
                        }
                        Sample* sample= new Sample(sstm.str(), catList, descList, precision);
                        samplesList.push_back(sample);
                        sampleCount++;
}
//////////////////////////////////////////
Ca ne peut pas marcher parce qu'alors ma liste ne fait que s'allonger et je me retrouver avec un vecteur aussi grand que la dimension de la matrice.
 
 
J'ai pensé à utiliser un vecteur de vecteur:
vector<vector<Descriptor*>> totalDescList;
 
Ce qui me donnerait ce code:
for(...){
for(auto incr: descValues){
                            descList.push_back(readDescriptor(incr, descName[wordCount], linesCount));
                            wordCount++;
                            sstm << sampleCount;
                        }
                        totalDescList.push_back(?); <- comment y stocker le petit bout de descList que je veux?
                        Sample* sample= new Sample(sstm.str(), catList, totalDescList[sampleCount-1]), precision);
                        samplesList.push_back(sample);
                        sampleCount++;
}
Mais je ne vois pas comment récupérer juste le petit bout de descList qui me concerne pour le stocker dans totalDescList...
 
 
Désolée pour la longueur, en tous cas j'espère que je suis claire!
Merci d'avance, parce que vraiment, je n'en peux plus là...!

Reply

Marsh Posté le 15-04-2014 à 12:14:59   

Reply

Marsh Posté le 15-04-2014 à 13:45:42    

tu fais de la soupe et tu t'embrouilles.
 
Est-ce que tu as vraiment besoin de polymorphisme sur ton descripteur ? Si tu n'en as pas besoin, tu peux retirer ton pointeur.
 
Au lieu de faire un vector<vector<Descriptor*>>, demande-toi quelles structures ont du sens et crée une classe ou une structure correspondante.
 
Pour écrire du code lisible, et aussi mieux réussir à résoudre tes problèmes, il faut arriver à simplifier tes étapes. Tu n'e pas obligé d'avoir une fonction qui lit tous les descripteurs de tous les individus. Commence par séparer en une fonction qui fait le tour des individus et une autre qui lit tous les descripteurs d'un individu donné.


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed