std :: multiset的迭代器上的std :: advance是否在恒定时间内完成?

时间:2018-11-06 14:35:50

标签: c++ stl iterator multiset

我想知道在std :: multiset的迭代器上调用std :: advance是否在恒定时间内完成。

2 个答案:

答案 0 :(得分:5)

否,只有随机访问迭代器才能在恒定时间内进行。否则,它是距离的线性时间。

请参阅:https://en.cppreference.com/w/cpp/iterator/advance

答案 1 :(得分:4)

std::advance,我们看到

  

复杂度

     

线性。但是,如果InputIt额外满足RandomAccessIterator的要求,则复杂度是恒定的。

由于std::*mapstd::*set系列中的任何模板均不满足RandomAccessIterator的要求,因此它是线性的。来自here

  

会员类型

     

[...]

     

iterator常量BidirectionalIterator
  const_iterator常量BidirectionalIterator