Bonjour,
Je souhaite créer et remplir un vecteur de strings à partir d'un fichier texte. J'ai suivi le conseil de la faq :
http://cpp.developpez.com/faq/cpp/?p...ream_iterators
Mon fichier contient 300000 lignes de 2 colonnes. Soit 600000 strings à stocker. Pour faire simple, disons que la taille ne varie pas (en pratique elle varie). Voici le code que j'ai écrit :
J'obtiens bien un vecteur de 600000 strings, pas de problème. Mon souci est dans le temps d'exécution : 1.4 secondes. Je trouve que c'est anormalement lent. Alors j'ai testé avec un tableau de strings :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // ouvre le fichier ifstream file("fichier.txt",ios::in) ; // crée le vecteur de strings vector<string> list ; // réserve la mémoire int size = 600000 ; list.reserve(size) ; // remplit le vecteur copy(istream_iterator<string>(file),istream_iterator<string>(),back_inserter(list)) ; // ferme le fichier file.close() ;
Cette solution avec le tableau de strings s'exécute en 0.9 secondes. Je pensais que le vecteur était mieux adapté, et qu'il serait plus rapide. J'aimerais savoir si c'est "normal" ou si j'ai mal compris quelque chose. Je ne suis pas sûr de bien faire la réserve de mémoire avec le vecteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // ouvre le fichier ifstream file("fichier.txt",ios::in) ; // crée le tableau de strings int size = 600000 ; string * list = new string[size] ; // remplit le tableau for ( int i = 0 ; i < size ; i++ ) file >> list[i] ; // ferme le fichier file.close() ;
Partager