[英]Why writing reverse iterator can affect whether an iterator is random-access-iterator or not?
[英]Why only random-access-iterator implements operator+ in C++?
我想獲得STL list
迭代器的下一個值,但它沒有實現operator+
, vector
雖然有它。 為什么以及如何在我想要的地方獲得價值?
如果我多次調用operator++
,我想我能做到這一點,但是不是有點臟嗎?
我想做的是以下內容:
list<int> l;
...omitted...
list<int>::iterator itr = l.begin() + 3; // but, list iterator does not have
// operator+
什么是我想要的最佳解決方案?
你想使用std :: advance :
list<int>::iterator itr = l.begin();
std::advance(itr, 3);
如果迭代器是隨機訪問,則advance
將使用operator+
並在常量時間內完成,而如果迭代器不是隨機訪問,則它將在operator++
上循環並在線性時間內完成。
這樣做的原因是讓您可以控制復雜性要求。 如果你關心操作的復雜性,你可以使用operator+
並獲得恆定的時間,但這只能用隨機訪問迭代器編譯。 如果您不關心復雜性,那么使用std::advance
將始終有效,但復雜性將根據迭代器而有所不同。
如果您無權訪問C ++ 11,也可以使用std::next
(和prev)或Boost提供的等價物。
list<int>::iterator itr = std::next(l.begin(), 3);
理由: std::advance
使用起來很笨拙(它通過副作用,而不是通過返回副本)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.