[英]Is std::advance on an iterator of std::multiset done in constant time?
我想知道在std :: multiset的迭代器上调用std :: advance是否在恒定时间内完成。
No, only random access iterators can advance in constant time. 不,只有随机访问迭代器才能在恒定时间内进行。 Otherwise, it's linear time on the distance. 否则,它是距离的线性时间。
See: https://en.cppreference.com/w/cpp/iterator/advance 请参阅: https : //en.cppreference.com/w/cpp/iterator/advance
From std::advance
, we see that 从std::advance
,我们看到
Complexity 复杂
Linear. 线性的 However, if InputIt additionally meets the requirements of RandomAccessIterator, complexity is constant. 但是,如果InputIt额外满足RandomAccessIterator的要求,则复杂度是恒定的。
As any template from the std::*map
and std::*set
family doesn't fulfill the RandomAccessIterator
requirements, it's linear. 由于std::*map
和std::*set
系列中的任何模板都不满足RandomAccessIterator
要求,因此它是线性的。 From eg here : 从例如这里 :
Member types 会员类型
[...] [...]
iterator
Constant BidirectionalIteratoriterator
Constant BidirectionalIterator
const_iterator
Constant BidirectionalIteratorconst_iterator
常数BidirectionalIterator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.