C++では、特定の条件を満たす要素のみを反復するイテレータを渡すことは可能ですか?私自身のイテレータクラスを書くことは確かに可能ですが、私は標準的なライブラリソリューションが存在するのだろうと思っています。例えば、std::discrete_distribution
のコンストラクタは2つのイテレータ(beginとend)の入力を受け取ります。今、私は、次の手順を実行する必要があります:特定の条件を満たす要素のみを反復するイテレータを渡す
std::vector<int> x = {1, 2, 3, 4, 5};
std::vector<int> y;
std::copy_if(x.begin(), x.end(), std::back_inserter(y), my_condition);
std::discrete_distribution dd(y.begin(), y.end());
しかし、これは二回y
のelemntsをコピーするために必要となります。
'std :: vector :: iterator'から独自のイテレータクラスを派生させ、' operator ++ 'をオーバーライドして条件を使うことができます。こちらをご覧ください:https://stackoverflow.com/questions/25772860/c-iterator-over-certain-elements-in-vector – nitronoid