c++ - 如何创建 std::ofstream 的向量并将流写入不同的文本文件
问题描述
std::vector
我只是想使用of std::ofstream
s将一些数字写入几个不同的文件。我的程序正在编译和运行,文件正在生成,但我的文件中没有文本。
#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()
不会向向量添加任何新元素,而只是为它们分配内存。
推荐阅读
- android - 异步操作在 AsyncTask 中运行在哪里?
- python - 如何在 Flask 中调用另一个视图
- javascript - Vue.js:使用方法切换动态数据的 CSS 类
- php - Laravel - 电子邮件验证后如何重定向到以前的网址?
- awk - 在一行上匹配两个模式并将它们打印在两列中
- python - 使用python的super()继承属性
- excel - 粘贴但保留目标格式
- highcharts - Highcharts:次轴的负值应低于 x 轴
- html - Highchart 树节点文本溢出
- swift - 当默认模式兼容所有类别时,AVAudioSession 中的其他模式有什么用?