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
可以!省去了我很多麻烦,谢谢!