C++イテレータの無効化ルールに関する最も人気のある投稿では、末尾のイテレータ (つまり、 end()
、cend()
、rend()
、およびによって返されるものcrend()
) が通常のイテレータと同じルールに従って無効化されるかどうかは明らかではないと主張しています。容器。2003 と 2011 の両方の C++ に対して行われたこれらの主張は、 End iterator invalidation rulesについて議論している投稿に委ねられています。この結論は、23.1/10 (のコンテキスト) のコメントに基づいておりswap()
、仕様で末尾イテレータの無効化が明示的に言及されていない場合、無効化される可能性があることを暗示しているようです。
その投稿の質問に対するコメント (by mike-seymour) は、C++ 11 がこの問題について明白であることを示唆していdeque
ます。私の質問はすべてのコンテナに関するものです:
- C++11 では、末尾イテレータを無効にする可能性のあるコンテナ操作はありますか? また、言語仕様でこの動作があいまいな場所はありますか?
別の言い方をすれば、
- 過去のイテレータを無効にする可能性があるとは言っていないコンテナー操作を実行した後、過去のイテレータの有効性を信頼できますか?