gpt4 book ai didi

c++ - 如何创建一个 ifstream 对象数组以及如何用编号的文本文件填充该数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:49 24 4
gpt4 key购买 nike

我在一个目录下有一堆文本文件,每个文本文件的名称是“info1.txt”、“info2.txt”等等。我将如何打开 ifstream 对象数组中的所有文本文件,而不必在其中硬编码所有文本文件名?我知道以下代码不起作用,但我认为它传达了如果它起作用我想做什么的想法:

ifstream myFiles[5];
for(int i = 0; i < 5; i++){
myFiles[i].open("info" + i + ".txt");
}

我知道解决方案可能非常简单,但经过大量研究、反复试验后我仍然没有弄清楚。谢谢!

最佳答案

为了构建文件名,我会使用 std::ostringstreamoperator<< .

如果你想使用像std::vector这样的容器类(例如,因为你在编译时不知道 ifstream 的数组有多大),因为 std::ifstream 不可复制,你不能使用vector<ifstream> , 但您可以使用 vector<shared_ptr<ifstream>>vector<unique_ptr<ifstream>> ;例如:

vector<shared_ptr<ifstream>> myFiles;
for (int i = 0; i < count; i++)
{
ostringstream filename;
filename << "info" << i << ".txt";
myFiles.push_back( make_shared<ifstream>( filename.str() ) );
}

unique_ptr (和 C++11 移动语义):

vector<unique_ptr<ifstream>> myFiles;
for (int i = 0; i < count; i++)
{
ostringstream filename;
filename << "info" << i << ".txt";
unique_ptr<ifstream> file( new ifstream(filename.str()) );
myFiles.push_back( move(file) );
}

unqiue_ptrshared_ptr 更有效率, 自 unique_ptr只是一个可移动 指针,它不是引用计数(因此开销比 shared_ptr 少)。因此,在 C++11 中,您可能更喜欢 unique_ptr如果ifstream不在 vector 之外共享容器。

关于c++ - 如何创建一个 ifstream 对象数组以及如何用编号的文本文件填充该数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969187/

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