Kar*_*Rei 5 c++ iterator stdmap
#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;
}
Run Code Online (Sandbox Code Playgroud)
打印出:
1, 1
2, 2
Run Code Online (Sandbox Code Playgroud)
根据标准,这真的应该发生吗?我没有触及reverse_iter,但它指向的值正在改变.我认为std :: map中的迭代器应该是安全的,不会插入.然而,似乎在决定reverse_iter不是要指向我告诉它的价值,而是指"在这个时间点发生在地图末尾的任何事情".
更新:进一步的信息,万一重要:这似乎不会发生前进迭代器(在任何情况下,我似乎可以找到),我的gcc版本是5.1.1-4.
正如此处引用的http://en.cppreference.com/w/cpp/container/map/rbegin
反向迭代器将迭代器存储到下一个元素,而不是它实际引用的元素
副作用是,如果您在该迭代器之前插入某些内容(包括 end()),那么当您取消引用该反向迭代器时,您将看到该新值。我不认为反向迭代器在这种情况下无效。
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |