gpt4 book ai didi

c++ - 如何创建std::ofstream的 vector 并将流写入不同的文本文件

转载 作者:行者123 更新时间:2023-12-02 10:16:35 26 4
gpt4 key购买 nike

我只是想使用std::vectorstd::ofstream将数字写到一些不同的文件中。我的程序正在编译并运行,并且正在生成文件,但是我的文件中没有文本。

#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(),因此会在 vector 中创建三个新的空 std::ofstream元素。然后,使用文件路径将另外三个 std::ofstream对象附加到带有 std::vector::emplace_back()的 vector 的后面。您最终在 vector 中包含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() 不会在 vector 中添加任何新元素,而只是为其分配内存。

关于c++ - 如何创建std::ofstream的 vector 并将流写入不同的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61709891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com