次のコードを検討してください。
std::set<int> s;
auto it = s.begin();
s.insert(1);
s.insert(2);
std::cout << *it << std::endl;
出力は(少なくとも私にとっては)です2
。ここで何が起こっているのですか?it
逆参照するとどのような状態になりますか?
空のセットを呼び出すとbegin()
、 に相当するイテレータが得られることを知っていますend()
。insert
また、 aを呼び出してもset
イテレータが無効にならないこともわかっています。end()
に要素を挿入したset
ため、未定義の動作が発生しているにもかかわらず、イテレータはどういうわけか同等のままですか? それは標準で定義されていますか?