c – 使用迭代器正确读取和写入std :: vector到文件中
发布时间:2020-12-16 10:36:34 所属栏目:百科 来源:网络整理
导读:我试图理解 here提供的答案,但我似乎无法使其发挥作用. 这是我尝试过的: #include algorithm#include iostream#include iterator#include vector#include fstreamint main(){ std::string path("numbersfile"); std::vectorint myVector{1,16,32,64}; std::
我试图理解
here提供的答案,但我似乎无法使其发挥作用.
这是我尝试过的: #include <algorithm> #include <iostream> #include <iterator> #include <vector> #include <fstream> int main() { std::string path("numbersfile"); std::vector<int> myVector{1,16,32,64}; std::vector<int> newVector{}; std::ofstream FILE(path,std::ios::out | std::ofstream::binary); std::copy(myVector.begin(),myVector.end(),std::ostreambuf_iterator<char>(FILE)); std::ifstream INFILE(path,std::ios::in | std::ifstream::binary); std::istreambuf_iterator<char> iter(INFILE); //std::copy(iter.begin(),iter.end(),std::back_inserter(newVector)); //this doesn't compile std::copy(iter,std::istreambuf_iterator<char>{},std::back_inserter(newVector)); // this leaves newVector empty } 最后一次复制后,newVector仍为空.如何更新最后一个语句以填充newVector? 解决方法
在调用第二个副本时,文件尚未准备好读取. (感谢Piotr Skotnicki在评论中的回答)
拨打 #include <algorithm> #include <iostream> #include <iterator> #include <vector> #include <fstream> int main() { std::string path("numbersfile"); std::vector<int> myVector{1,std::ostreambuf_iterator<char>(FILE)); FILE.flush(); // required here std::ifstream INFILE(path,std::back_inserter(newVector)); // this leaves newVector empty return 0; } 创建ifstream时,ofstream仍在范围内.如果已经调用了ofstream的析构函数,那么该文件也已经为ifstream做好了准备.在以下程序中,ifstream会自动销毁: #include <algorithm> #include <fstream> #include <iterator> #include <vector> std::string filename("numbersfile"); std::vector<double> myVector{1.342,16.33,32.1,12364}; 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)}; 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<double> osi{ofs," "}; std::copy(myVector.begin(),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::istream_iterator<double> iter{ifs}; std::istream_iterator<double> end{}; std::copy(iter,end,std::back_inserter(newVector)); return newVector; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读