我在std::vector
上使用反向迭代器,并根据以下链接:
http://www.cplusplus.com/reference/stl/vector/rbegin/
myVector.rbegin()
是向量的最后一个元素。就我而言,我实际上是past the end
上的rbegin()
迭代器和rend()
中的第一个元素。我希望rend()
给我past the end
迭代器和rbegin()
给我容器中的最后一个元素。我完全理解错了吗?
以下是我的代码,没什么特别的。我在分配之后设置了一个断点,上面是我在调试器中得到的结果(VecDebugCubes
是std::vector<myStructure>
的类型定义)
VecDebugCubes::reverse_iterator itr = pActiveDebugCubes.rbegin();
VecDebugCubes::reverse_iterator itrEnd = pActiveDebugCubes.rend();
while (itr != itrEnd)
{
(*itr)->printDebugValues();
++itr;
}
答案 0 :(得分:5)
请参阅http://www.cplusplus.com/reference/std/iterator/reverse_iterator/base/。
取消引用反向迭代器将返回与您在调试器中看到的值不同的值。
答案 1 :(得分:0)
rbegin()的结束和rend()的第一个元素是迭代器的工作方式。这就是为什么它被称为反向迭代器。它的设计使你可以在for循环中使用它,而不必担心错误的范围的起点和终点。你会注意到一个简单的i ++可以用于迭代器,而迭代器实际上是在范围上向后迭代。 我想你需要知道的是,它应该如何工作。没有错。它只会让你的生活变得更轻松,因为你在写 for(i = beginAtTheEnd to finishAtTheStart and decrement-i-in-the-way-as-as-i ++)时不太可能犯错比 for(i = 10; i> 0; i - ),你可能会犯 i <0 或 i&gt; 1 < / strong>在这种情况下。这是一个简化的例子。当你想在容器上反向迭代时,你会更加欣赏它。