C++ 如何创建std::ofstream s的向量并将流写入不同的文本文件
我只是尝试使用C++ 如何创建std::ofstream s的向量并将流写入不同的文本文件,c++,stringstream,C++,Stringstream,我只是尝试使用std::ofstreams的std::vector将一些数字写入几个不同的文件。我的程序正在编译和运行,文件正在生成,但文件中没有文本 #include <iostream> #include <fstream> #include <vector> int main() { auto num_components = 3; std::vector<std::ofstream> files_to_be_writte
std::ofstream
s的std::vector
将一些数字写入几个不同的文件。我的程序正在编译和运行,文件正在生成,但文件中没有文本
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
auto num_components = 3;
std::vector<std::ofstream> files_to_be_written;
files_to_be_written.resize(num_components);
for (auto i = 0; i < num_components; ++i){
std::string file_name = "text" + std::to_string(i) + ".txt";
files_to_be_written.emplace_back(std::ofstream{ file_name });
}
std::vector<std::vector<int>> data_to_be_written;
data_to_be_written.resize(num_components);
data_to_be_written[0].push_back(1);
data_to_be_written[0].push_back(2);
data_to_be_written[0].push_back(3);
data_to_be_written[1].push_back(4);
data_to_be_written[1].push_back(5);
data_to_be_written[1].push_back(6);
data_to_be_written[2].push_back(7);
data_to_be_written[2].push_back(8);
for (auto& it : data_to_be_written)
{
auto idx = &it - &data_to_be_written[0];
for (auto i = it.begin(); i != it.end(); ++i)
{
files_to_be_written[idx] << *i << "\n";
}
}
for (auto i = 0; i < num_components; ++i){
files_to_be_written[i].close();
}
}
#包括
#包括
#包括
int main()
{
自动元件数量=3;
std::要写入的向量文件;
要写入的文件。调整大小(组件数量);
用于(自动i=0;i
files_to_be_written.resize(num_components);
与
不向向量添加任何新元素,只为它们分配内存。虽然我不确定问题出在哪里,但我想指出几个看起来很奇怪的地方。迭代整数,而不是for(auto&it:data\u to\u be\u writed)
和随后的指针魔术来获取索引。一旦你将vector更改为deque,你就注定要失败。此外,在Main结束时不需要关闭。我还猜想,将std::ofstream对象移动到一个vector中会对你的流产生意想不到的影响。尝试智能指针
for (auto& it : data_to_be_written)
{
auto idx = &it - &data_to_be_written[0];
for (auto i = it.begin(); i != it.end(); ++i)
{
files_to_be_written[idx] << *i << "\n";
}
}
files_to_be_written.resize(num_components);
files_to_be_written.reserve(num_components);