関数によって返された範囲を 1 つの大きな範囲に連結したいと考えています。次のコードを検討してください。
some_type_i_cant_figure_out bar() {
typedef std::vector<int>::const_iterator iter;
std::vector<int> aaa;
/* fill some data into aaa*/
some_type_i_cant_figure_out cc;
for (int i = 0; i < aaa.size(); ++i) {
std::pair<iter, iter> bbb = foo(aaa, i);
ccc = boost::join(ccc, bbb);
}
return ccc;
}
私が達成しようとしていること:
aaa ベクトルは巨大で、 foo は非常に大きな範囲を返す可能性があります。もちろん、範囲内のすべての要素のコピーを新しい整数のベクトルに作成して返すこともできます。非効率的で、メモリと時間を浪費します。したがって、boost::joined_range を 1 つ返したいと思います。最悪の場合、範囲のベクトルを使用できますが、単純すぎてエレガントではありません:) Joined_range がデフォルトで構築可能ではないことに加えて (この実装例では問題になります)、戻り値の型は何でしょうか? 一時変数 (ccc) 型と、上記を達成するための正しくエレガントな方法は何でしょうか?