我試圖將std::vector<double>
保存到文件並讀取以重建std::vector<double>
。此代碼來自rex(original answer)適用於std::vector<char>
,但不適用於雙打。一旦我試圖修改這個以使用雙打,數字就會丟失小數點。這是我嘗試(修改後的代碼)保存並讀取文件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;
}
此代碼輸出16
,而不是16.32131
。 我應該怎樣才能使這項工作與雙打? 謝謝。
你應該發佈你已經修改的代碼,解釋它做錯了什麼,然後我們可以提供幫助。 –
對不起@SamiKuhmonen,我更新了帖子 – nipunasudha
如果你流入和流出'std :: strstream'而不是寫入文件,你可以做出更好的[mcve]。 –