std::vector<double>
をファイルに保存しようとしていて、std::vector<double>
を再ビルドしています。 rex(original answer)のこのコードはstd::vector<char>
で動作しますが、倍精度では動作しません。一度私は倍精度で動作するようにこれを修正しようとすると、数値は小数点を失います。ここに私の試み(変更されたコード)ファイルからダブルベクトルを保存して読み込みます。
#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;
}
は、このコードの出力16
の代わり16.32131
です。 これをダブルにするにはどうすればよいですか? ありがとうございます。
既に修正したコードを投稿し、何が間違っているのかを説明してから助けてください。 –
ごめんなさい@SamKuhmonen、投稿を更新しました – nipunasudha
ファイルを書き込むのではなく、 'std :: strstream'との間でストリームすると、より良い[mcve]を作ることができます。 –