[英]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);
有關此偏愛問題的相關文章/問答,請參見:
foo.begin()-1
產生未定義的行為,所以不,這不是一個好主意。
既然你在做什么一個反向迭代器被設計來完成,這似乎是明顯的方式來做事。 反向迭代器當然有局限性,但是在許多情況下(包括上面概述的情況),它們根本無關緊要。
順便說一句,您的第二個循環基本上等效於:
std::for_each(foo.rbegin(), r.rend(), DoSomethinghere);
除了for_each
將傳遞迭代器指向的項目(通常不相關)的細節(而不是迭代器本身)之外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.