std :: remove_ifは、(イテレータの順序に従って)各要素の述語を常に呼び出すか、順不同で呼び出すことができますか?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;
}));
}
私が処理し、一定の基準を満たすベクトルのすべての要素を削除し、消去+ remove_ifは、そのための完璧なようだする必要があります。ここでは
は私がやりたいもののおもちゃの一例です。しかし、私が行う処理には副作用があり、処理が順番に行われるようにする必要があります(おもちゃの例では、値を元のベクトルの順序で印刷したいと仮定します)。私の述語が各項目に対して順番に呼び出されると想定するのは安全でしょうか?
私は、C++ 17の実行ポリシーがこれを曖昧にしていると思いますが、C++ 17はまだ出ていないので、明らかに私を助けません。
編集:これは良い考えですか?または、これを達成するためのより良い方法がありますか?
明らかに、副作用は 'ベクター'自体を変更するでしょうか?それはどんなイベントでも使用されているイテレータを無効にするので、最初にそのイテレータを使用することをお勧めします。 'remove_if'の実行中に、' vector'中の任意の項目の正確な位置が保証されていないので、 'vector'の_values_に影響を与える副作用にも注意してください。 – ShadowRanger
いいえ、副作用によってベクターが変更されることはありません。副作用は実際にファイルにいくつかのことを書いています。 – Solaraeus
天気かどうかは疑問だと思います。副作用のすべてを行い、その後削除します。 –