:
特に断りのない限り(明示的に、または他の機能の点で関数を定義することによって)、容器のメンバ関数を呼び出すか、ライブラリの引数としてコンテナを渡しますそのコンテナ内のオブジェクトにイテレータを無効化したり、その値を変更してはならない。このようstd::set
として連想コンテナについては
は、セクション23.2.4([associative.reqmts]
)は言う:
insert
とemplace
メンバーはならないFF ECTコンテナへのイテレータと参照の有効性、およびerase
メンバーイテレータと消去された要素への参照のみを無効にするものとします。
したがって、イテレータは追加アイテムを挿入した後も有効です。
しかし、スレッドの安全性は全く別のトピックです。
セクション17.6.5.9([res.on.data.races]
)基礎となるコンテナにアクセスすることができますが、それを修正してはならない、標準ライブラリコンテナまたは文字列のメンバ関数を呼び出すことによって取得したイテレータに
操作することを提供します。
それが更新されていながら、それはコンテナの読み込みになりますので、別のスレッドからコレクションに挿入しながらstd::set
イテレータを使用することは必ずしも安全ではありません。あなたの実装はより強い保証を提供するかもしれません。
良い:[反復子無効化](http://stackoverflow.com/questions/6438086/iterator-invalidation-rules) –
@Als:しかし、スレッド化にはまったく対応していません。 –
@BenVoigt:はい、それでは、重複したものではなく、良い読み取りとして追加しました:) –