2

私は最新のC++仕様を読んでいremove_ifますが、同じ要素に対して複数回呼び出すことができるかどうかを理解できません。特に、イテレータstd::remove_ifで呼び出されることを検討しています。deque私が理解できる限り、最初のパラメーターから開始して2番目のパラメーターまで繰り返すだけであれば、複数回呼び出される理由はありません。

私が取り組んでいるコードは手動の参照カウントを使用しているため、remove_if述語がtrueを返す場合は、基になるオブジェクト参照をデクリメントして削除します。remove_ifこれは、述語が要素ごとに1回だけ呼び出された場合にのみ機能することは明らかです。そうでない場合、後続の呼び出しは削除されたオブジェクトにアクセスします。これがOKであるとは限らず、同じ要素が1回の呼び出しremove_ifで2回述語に渡されるポイントが来ると何かが教えてくれます。remove_if

イテレータを実装するある種のクレイジーなデータ構造があり、イテレータの増分ごとにエントリをランダムに選択して、それが(ランダムに)終了イテレータに到達するまで、これがどのように失敗するかを確認できました。しかし、、、、、などの単純で標準化された構造の場合、deque単一の要素を複数回述語に渡すことができますか?vectorlist

4

1 に答える 1

3

規格§23.3.4.6/14の草案によると:

複雑さ:正確にdistance(begin()、end())アプリケーション
対応する述語の。

参照が少しずれている場合はご容赦ください。それは私にとって実際に公式に引用するのは初めてです。それがあなたが探している情報であることを願っています。

于 2012-07-20T03:31:31.447 に答える