我正在尝试通过以下代码通过std::map进行反向迭代:http://www.cplusplus.com/reference/stl/map/rend/
它说:

map<float,int> m;
m.insert(pair<float,int>(.1,0));
m.insert(pair<float,int>(.4,5));
map<float,int>::reverse_iterator rend=m.rend();
map<float,int>::iterator begin=m.begin();
当我运行此命令时,rend和begin都指向m的第一个元素(.1,0),显然不应该这样做,请参见上面的注意事项。我觉得我犯了一个非常明显的错误,但我不知道这可能是什么。
(C++,MSVC2010)

最佳答案

我相信您缺少的一点是,如果使用调试器检查值,则rend()begin()返回的值将包含相同的值。但是,迭代器类型的operator*成员仍然可以让您访问不同的对象。

技术细节:rend()返回的值不能指向begin()之前,因为那是无效的。因此,决定rend()应该包含begin()的值,并将所有其他反向迭代器再移一个位置。 operator*对此进行补偿,并且无论如何都访问正确的元素。

24.5.1反向迭代器的第一段说:

09-07 05:53