#include <iostream>
#include <map>
int main(int argc, char** argv)
{
std::map<int, int> map;
map.emplace(1, 1);
auto reverse_iter = map.rbegin();
std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
map.emplace(2, 2);
std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
return 0;
}
これはアウト出力しますこれは適切な動作ですか? std ::マップイテレータの無効化
1, 1
2, 2
はこれが標準によると、起こることになっているものは本当にですか?私はreverse_iter触れていないよ、それがポイントの値が変化しています。私はSTDにイテレータを考え::マップが挿入に対して安全であることになっていました。しかし、むしろ、「この時点でマップの最後であることを起こるものは何でも」するために、私はそれを告げた値を指して滞在することはないというreverse_iterを決定しているようです。
更新:(どのような状況で、私は見つけるように見えることができます)、これは前方イテレータで発生していないようだ、と私のgccのバージョンは5.1.1-4です:更なる情報、ケースには重要。
「無効化」であると、新しいデータを指すが、同じものではありません、彼らは何ですか?これは、コンテナ内の最後のペアへの有効なポインタです。そのペアはちょうど変わったことが起こります。 – tadman
フォワードイテレータでは発生しません。 rbeginをbeginで置き換え、(2、2)を(0、0)で置き換えます。また、標準に準拠していますか?それは本当に予期せぬことであるので、確かです。 – KarenRei
あなたがマップに入れた最初のものは変更されません。しかし、あなたがやった最後のことができます。 – tadman