ファイル名の作成には、とを使用std::ostringstream
しoperator<<
ます。
次のようなコンテナクラスを使用する場合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_ptr
は移動可能shared_ptr
なポインタであるため、参照カウントされないため、よりも効率的ですunique_ptr
(したがって、よりもオーバーヘッドが少なくなります)。したがって、C ++ 11では、'がコンテナの外部で共有されていない場合に優先することができます。shared_ptr
unique_ptr
ifstream
vector