我正在尝试通过以下代码通过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反向迭代器的第一段说: