std::remove_if は常に (反復子の順序に従って) 各要素の述語を順番に呼び出しますか、それとも順不同で呼び出される可能性がありますか?
これが私がやりたいことのおもちゃの例です:
void processVector(std::vector<int> values)
{
values.erase(std::remove_if(values.begin(), values.end(), [](int v)
{
if (v % 2 == 0)
{
std::cout << v << "\n";
return true;
}
return false;
}));
}
特定の基準を満たすベクトルのすべての要素を処理して削除する必要があり、erase + remove_if はそれに最適なようです。ただし、これから行う処理には副作用があり、処理が順番どおりに行われるようにする必要があります (おもちゃの例で、元のベクトルに表示される順序で値を出力するとします)。
私の述語が各項目で順番に呼び出されると想定しても安全ですか?
C++17 の実行ポリシーによってこれが明確になると思いますが、C++17 はまだリリースされていないため、明らかに役に立ちません。
編集:また、これは良い考えですか?または、これを達成するためのより良い方法はありますか?