簡體   English   中英

反向迭代器未按預期工作

[英]Reverse Iterator not working as expected

我在std::vector上使用反向迭代器並根據以下鏈接:

http://www.cplusplus.com/reference/stl/vector/rbegin/

myVector.rbegin()是向量的最后一個元素。 在我的例子中,我實際上是在rbegin()上獲得了past the end迭代器和來自rend()第一個元素。 我本來期望rend()給我past the end迭代器和rbegin()來給我容器中的最后一個元素。 我完全理解錯了嗎?

以下是我的代碼,沒什么特別的。 我在分配之后設置了一個斷點,上面是我在調試器中得到的結果( VecDebugCubesstd::vector<myStructure>的類型定義)

VecDebugCubes::reverse_iterator itr    = pActiveDebugCubes.rbegin();
VecDebugCubes::reverse_iterator itrEnd = pActiveDebugCubes.rend();
while (itr != itrEnd)
{
  (*itr)->printDebugValues();
  ++itr;
}

訪問http://www.cplusplus.com/reference/std/iterator/reverse_iterator/base/

取消引用反向迭代器將返回與您在調試器中看到的值不同的值。

rbegin()的結尾和rend()的第一個元素是迭代器的工作方式。 這就是為什么它被稱為反向迭代器。 它的設計使你可以在for循環中使用它,而不必擔心錯誤的范圍的起點和終點。 你會注意到一個簡單的i ++可以用於迭代器,而迭代器實際上是在范圍上向后迭代。 我想你需要知道的是,它應該如何工作。 沒有錯。 它只會讓你的生活變得更輕松,因為你在寫作時不太可能犯錯誤(i = beginAtTheEnd完成啟動和減少 - 我在同樣的方式中作為i ++)而不是(i = 10) ; i> 0; i--) ,你可能會錯誤地將i <0i> 1置於條件中。 這是一個簡化的例子。 當你想在容器上反向迭代時,你會更加欣賞它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM