创建一个 ofstream 向量。

12

我试图创建一个ofstream向量..

vector<ofstream> streams;
for (int i = 0; i < numStreams; i++){
  ofstream out;
  string fileName = "text" + to_string(i) + ".txt";
  output.open(fileName.c_str());
  streams.push_back(out);
}

这段代码无法编译... 尤其是最后一行,我试图将 ofstream 添加到我的向量中时出现了错误。 我忽略了什么?


4
这是因为 ofstream 没有复制构造函数。 - Magnus Hoff
我认为你可以继续前进,不是吗? - user1084944
2个回答

18

如果你能使用C++11,你可以使用std::move,否则只需在向量中存储指针(智能指针)。

streams.push_back(std::move(out));

或者使用智能指针

vector<std::shared_ptr<ofstream> > streams;
for (int i = 0; i < numStreams; i++){
  std::shared_ptr<ofstream> out(new std::ofstream);
  string fileName = "text" + to_string(i) + ".txt";
  out->open(fileName.c_str());
  streams.push_back(out);
}

1
使用 std::move 真的很有效!省了我很多麻烦,谢谢! - Tim

11

你可以使用vector::emplace_back代替push_back,这将直接在向量中创建流,因此不需要复制构造函数:

std::vector<std::ofstream> streams;

for (int i = 0; i < numStreams; i++)
{
    std::string fileName = "text" + std::to_string(i) + ".txt";
    streams.emplace_back(std::ofstream{ fileName });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接