次のコードを検討してください。
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ため、未定義の動作が発生しているにもかかわらず、イテレータはどういうわけか同等のままですか? それは標準で定義されていますか?