如何创建std::of流的向量,并将流写入不同的文本文件



我只是想用std::ofstreams的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();
}
}

我不确定我在哪里犯了错误。

auto num_components = 3;
std::vector<std::ofstream> files_to_be_written;
files_to_be_written.resize(num_components);

由于您在此处调用std::vector::resize(),这将在向量中创建三个新的空std::ofstream元素。然后使用文件路径将另外三个std::ofstream对象附加到具有std::vector::emplace_back()的向量的后面。最终矢量中有6个元素。

问题是,您只写入这段代码中的前三个std::ofstream元素:

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);

std::vector::reserve()不向向量添加任何新元素,只是为它们分配内存。

最新更新