簡體   English   中英

為什么只有random-access-iterator在C ++中實現operator +?

[英]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.

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