私は、(テンプレート化された)反復子のペアIterator begin1
とIterator end1
を持っています。私は関数fooを持っています。署名付きで適応イテレータを取得するための迅速かつ汚れた方法は何ですか?
template <typename ForwardIterator>
void foo(ForwardIterator begin, ForwardIterator end);
これはその範囲で何かします。今、私はfoo
が実際の範囲の要素ではなく、むしろいくつかのラムダまたはいくつかの関数bar
によってこれらの要素の変換に作用するようにしたいと思います。私はは、変換された値のためにstd :: transformを使用するか、それ以外の場合はテンポラリストレージを使用できません。これは、あまりにも多くの領域を占めるか、またはヒープ上に何かを割り当てることができないためです。
今、自分でイテレーターを適用することはできますが、私はむしろ既製のものを使用して、ホイールを再構成しません。
これで、私が欲しいことを行うためにfoo
に渡すことができる、適切な適応イテレータのペアを取得するための迅速かつ汚れた方法は何ですか?すなわち、私のため
foo(magic(begin), magic(end))
または
auto new_pair = magic(begin, end);
foo(new_pair.first, new_pair.second);
を呼び出すことができますか?
最終的には標準になる@ eric-nieblerの[range-v3 library](https://github.com/ericniebler/range-v3)を試してみてください! –
[ブーストイテレーターアダプター](http://www.boost.org/doc/libs/1_62_0/libs/iterator/doc/index.html)は別の方法です – Jarod42
@BrianRodriguez:より具体的に/明示的にすることができますか?答えに? – einpoklum