私は最新のC++仕様を読んでいremove_if
ますが、同じ要素に対して複数回呼び出すことができるかどうかを理解できません。特に、イテレータstd::remove_if
で呼び出されることを検討しています。deque
私が理解できる限り、最初のパラメーターから開始して2番目のパラメーターまで繰り返すだけであれば、複数回呼び出される理由はありません。
私が取り組んでいるコードは手動の参照カウントを使用しているため、remove_if
述語がtrueを返す場合は、基になるオブジェクト参照をデクリメントして削除します。remove_if
これは、述語が要素ごとに1回だけ呼び出された場合にのみ機能することは明らかです。そうでない場合、後続の呼び出しは削除されたオブジェクトにアクセスします。これがOKであるとは限らず、同じ要素が1回の呼び出しremove_if
で2回述語に渡されるポイントが来ると何かが教えてくれます。remove_if
イテレータを実装するある種のクレイジーなデータ構造があり、イテレータの増分ごとにエントリをランダムに選択して、それが(ランダムに)終了イテレータに到達するまで、これがどのように失敗するかを確認できました。しかし、、、、、などの単純で標準化された構造の場合、deque
単一の要素を複数回述語に渡すことができますか?vector
list