#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;
}
打印输出:
1, 1
2, 2
根据标准,这真的应该发生吗?我没有碰到reverse_iter,但是它指向的值正在改变。我认为std :: map中的迭代器应该可以安全插入。然而,似乎正在决定reverse_iter不会一直指向我告诉它的值,而是指向“此刻在地图末尾的任何情况”。
更新:更多信息,以防万一:正向迭代器似乎没有发生这种情况(在任何情况下,我似乎都能找到),我的gcc版本是5.1.1-4。
如此处引用http://en.cppreference.com/w/cpp/container/map/rbegin
反向迭代器将迭代器存储到与其实际引用的元素相比的下一个元素。
副作用是,如果在该迭代器之前插入一些内容(包括end()),则在取消引用该反向迭代器时会看到该新值。我认为在这种情况下反向迭代器不会失效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句