C++ 创建流的矢量

C++ 创建流的矢量,c++,ofstream,C++,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); } 矢量流; for(int i=0;i

我正在尝试创建一个流的向量

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);
}
矢量流;
for(int i=0;i

这段代码不会编译。。特别是最后一行,我尝试将ofstream添加到向量中,这会生成一个错误。我忽略了什么?

如果您可以使用C++11,您可以使用
std::move
,如果不只是在vector中存储指针(智能指针)

streams.push_back(std::move(out));
或者使用智能PTR

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);
}
矢量流;
for(int i=0;iopen(fileName.c_str());
流。推回(向外);
}

您可以使用
vector::emplace\u back
而不是
push\u 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 });
}
std::矢量流;
for(int i=0;i
这失败了,因为流的
没有复制构造函数。不过我想你可以移动一个。使用
std::move
可以!省去了我很多麻烦,谢谢!