J'essaie d'enregistrer un std::vector<double>
dans un fichier et lire pour reconstruire le std::vector<double>
. Ce code de rex (original answer) fonctionne pour std::vector<char>
mais pas pour les doubles. Une fois que j'ai essayé de modifier cela pour travailler avec des doubles, les nombres perdent des points décimaux. Voici ma tentative (code modifié)Enregistrer et lire double vecteur à partir du fichier C++
#include <iostream>
#include <algorithm>
#include <fstream>
#include <iterator>
#include <vector>
std::string filename("savefile");
std::vector<double> myVector{1321.32132,16.32131,32.321,64,3213.454};
void write_vector_to_file(const std::vector<double>& myVector, std::string filename);
std::vector<double> read_vector_from_file(std::string filename);
int main()
{
write_vector_to_file(myVector, filename);
auto newVector{read_vector_from_file(filename)};
//printing output
std::cout << newVector.at(1) << std::endl;
return 0;
}
void write_vector_to_file(const std::vector<double>& myVector,std::string filename)
{
std::ofstream ofs(filename,std::ios::out | std::ofstream::binary);
std::ostream_iterator<char> osi{ofs};
std::copy(myVector.begin(),myVector.end(),osi);
}
std::vector<double> read_vector_from_file(std::string filename)
{
std::vector<double> newVector{};
std::ifstream ifs(filename,std::ios::in | std::ifstream::binary);
std::istreambuf_iterator<char> iter(ifs);
std::istreambuf_iterator<char> end{};
std::copy(iter,end,std::back_inserter(newVector));
return newVector;
}
Ce sorties de code 16
au lieu de 16.32131
. Que dois-je faire pour que cela fonctionne avec les doubles? Merci.
Vous devriez publier le code que vous avez déjà modifié, expliquer ce qu'il fait mal et nous pouvons vous aider. –
désolé @SamiKuhmonen, j'ai mis à jour le poste – nipunasudha
Vous pourriez faire un meilleur [mcve] si vous flux vers et depuis un 'std :: strstream' au lieu d'écrire des fichiers. –