为了构建文件名,我会使用std::ostringstream
and operator<<
。
如果您想使用容器类(例如,因为您在编译时不知道'sstd::vector
的数组有多大),因为不可复制,您不能使用,但可以使用or ; 例如: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_ptr
比 更有效shared_ptr
,因为unique_ptr
它只是一个可移动指针,它没有引用计数(因此开销比 少shared_ptr
)。unique_ptr
因此,在 C++11 中,您可能希望ifstream
' 不在vector
容器外共享。