Salut,
J'ai un petit soucis lors de la lecture de vecteurs dans un fichier.
Par exemple voici le vecteur que je veux écrire :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::vector<int> ints = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
J'écris et lis les données de cette manière en écrivant la taille du vecteur et ensuite chaque élément du vecteur :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <class O> void operator() (std::vector<O>& data) { unsigned int size = data.size(); std::cout<<"size : "<<size<<std::endl; buffer<<size<<" "; for (unsigned int i = 0; i < data.size(); i++) (*this)(data[i]); }
Ce qui me donne dans le fichier :
Et lors de la lecture je lis la taille du vecteur et les données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 11 0 1 2 3 4 5 6 7 8 9 10
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class O> void operator() (std::vector<O>& objects) { unsigned int size; buffer>>size; std::cout<<"size : "<<size<<std::endl; for (unsigned int i = 0; i < size; i++) { O object; (*this)(object); objects.push_back(object); } }
Mais il y a un gros problème, à l'écriture il m'écris bien la taille du vecteur mais à la lecture il m'affiche 8, donc on dirait qu'il me lit l'avant, avant dernière donnée du fichier au lieu de me lire la 1ère donnée comme je m'y attendait.
Y a t'il un moyen de dire à ifstream de lire les données dans l'ordre ? (entre autre de lire le 1er chiffre d'abord pour récupérer la taille du vecteur)
J'ai l'impression qu'il lis de manière aléatoire dans la ligne du fichier. (Possède t'il son propre ordre de lecture et d'écriture ?)
Partager