std::vectors
大きい(渡された)を受け入れ、const &
大きいベクトル(値で)を返す関数があります。コードの一部で、次のことを行う必要があります。
std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something with res
}
そして私のコードの別の部分で私はする必要があります:
std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something different with res
}
最も単純なオプション(メモリホッグ):f
単純にマッピングしall_values
て結果を調べ、// do something with res
または// do something different with res
(それぞれの場合)を実行
するだけでコードを再利用するのは簡単です。これの欠点は、(不必要に)大きなstd::vector
の長いリストを保存する必要があることです。一方では、私はそれが私が持っているより多くのメモリを使用しないことを確信しています。しかし、それでも、大量のデータを不必要に保存することは悪い習慣のようです。
オプション1(要求に応じて結果を生成するためにイテレーターを使用):
1つのオプションは、mapのように動作するが、必要に応じて結果を生成するiterator_map関数を作成することです。これはPythonでかなり実行可能だと思いますyield
。
オプション2(オブジェクト指向設計を使用):
別のオプションは、ABC
継承を使用して関数をオーバーライドすることg
です。一方の派生クラスでは、g
を実行// do something with res
し、もう一方のクラスでは、を実行します// do something different with res
。
オプション3+(???):
C++でこのような問題をどのように処理するかについてのアドバイスを本当に聞きたいです。前もって感謝します。