問題タブ [erase-remove-idiom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1006 参照

c++ - std::remove_if は述語を順番に呼び出すことが保証されていますか?

std::remove_if は常に (反復子の順序に従って) 各要素の述語を順番に呼び出しますか、それとも順不同で呼び出される可能性がありますか?

これが私がやりたいことのおもちゃの例です:

特定の基準を満たすベクトルのすべての要素を処理して削除する必要があり、erase + remove_if はそれに最適なようです。ただし、これから行う処理には副作用があり、処理が順番どおりに行われるようにする必要があります (おもちゃの例で、元のベクトルに表示される順序で値を出力するとします)。

私の述語が各項目で順番に呼び出されると想定しても安全ですか?

C++17 の実行ポリシーによってこれが明確になると思いますが、C++17 はまだリリースされていないため、明らかに役に立ちません。

編集:また、これは良い考えですか?または、これを達成するためのより良い方法はありますか?

0 投票する
2 に答える
18840 参照

c++ - erase-remove_if イディオムの使用

私が持っているとしましょうstd::vector<std::pair<int,Direction>>

ベクトルからペアを削除するために、erase-remove_if イディオムを使用しようとしています。

.first 値が 4 に設定されているすべてのペアを削除したいと考えています。

私の例では、ペアがあります:

ただし、erase-remove_if を実行すると、次のものが残ります。

ここで何が間違っていますか?