ifstream ne lis pas les données dans l'ordre.
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:
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:
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 :
Code:
1 2
|
11 0 1 2 3 4 5 6 7 8 9 10 |
Et lors de la lecture je lis la taille du vecteur et les données :
Code:
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 ?)