簡體   English   中英

反向遍歷:迭代器還是反向迭代器:正確性和偏好?

[英]reverse traversal: iterator or reverse iterator: correctness and preference?

我可以使用下面的迭代器反轉遍歷嗎(正確嗎?):

for (auto it=foo.end()-1; it != foo.begin()-1; it--)
    DoSomethingHere(it);

我一直在矢量上做到這一點。 但是,從Dobbs博士的文章看來,迭代器的實現可能有所不同。 恐怕它可能在其他類的迭代器上失敗。

如果以上實現是正確的,則首選還是以下反向迭代器:

for (auto it = foo.rbegin(); it != foo.rend(); it++)
        DoSomethingHere(it);

有關此偏愛問題的相關文章/問答,請參見:

  1. 如何使用std :: reverse_iterator擦除並繼續
  2. 多布斯博士文章
  3. “ std :: reverse_iterator的缺點是什么?”

foo.begin()-1產生未定義的行為,所以不,這不是一個好主意。

既然你在做什么一個反向迭代器被設計來完成,這似乎是明顯的方式來做事。 反向迭代器當然有局限性,但是在許多情況下(包括上面概述的情況),它們根本無關緊要。

順便說一句,您的第二個循環基本上等效於:

std::for_each(foo.rbegin(), r.rend(), DoSomethinghere);

除了for_each將傳遞迭代器指向的項目(通常不相關)的細節(而不是迭代器本身)之外。

暫無
暫無

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

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