C++ では、関数が多くの (数百または数千の) 値を作成するたびに、関数が出力値で満たす配列を呼び出し元に渡すようにしていました。
void computeValues(int input, std::vector<int>& output);
そのため、関数はoutput計算した値でベクトルを埋めます。しかし、私が今気付いているように、これは本当に良い C++ スタイルではありません。
次の関数シグネチャは、 の使用をコミットしないため、より優れていstd::vectorますが、任意のコンテナーを使用できます。
void computeValues(int input, std::insert_iterator<int> outputInserter);
これで、発信者は次のように呼び出すことができますinserter:
std::vector<int> values; // or could use deque, list, map, ...
computeValues(input, std::back_inserter(values));
繰り返しますが、具体的に使用することにコミットしていませんstd::vector。これは良いことです。なぜなら、ユーザーは a などの値を必要とするだけかもしれないからです(値または参照std::setで渡す必要がありますか?)iterator
私の質問は次のとおりですinsert_iterator。それを行う正しい方法または標準的な方法はありますか? それとももっと良いものがありますか?
編集:質問を編集して、2 つまたは 3 つの値を返すことについて話しているのではなく、数百または数千の値を返すことについて話していることを明確にしました。(特定のディレクトリで見つかったすべてのファイル、またはグラフ内のすべてのエッジなどを返すと想像してください。)