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 :

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() ;
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
// 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() ;
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.