lowerbound(s.begin(), s.end(), v)
  • 板块学术版
  • 楼主optimize_2
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/9/11 14:02
  • 上次更新2023/10/27 12:00:40
查看原帖
lowerbound(s.begin(), s.end(), v)
224978
optimize_2楼主2022/9/11 14:02

如题,我发现 s.lowerbound(v)lowerbound(s.begin(), s.end(), v) 的运行效率差了很多。

据同学说后者是 O(n2)O(n^2) 的,但是我查了 cplusplus.com,他说 The behavior of this function template is equivalent to:

template <class ForwardIterator, class T>
  ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val)
{
  ForwardIterator it;
  iterator_traits<ForwardIterator>::difference_type count, step;
  count = distance(first,last);
  while (count>0)
  {
    it = first; step=count/2; advance (it,step);
    if (*it<val) {                 // or: if (comp(*it,val)), for version (2)
      first=++it;
      count-=step+1;
    }
    else count=step;
  }
  return first;
}

这不是二分吗,是不是因为 set::iterator 不是随机访问迭代器的原因?

2022/9/11 14:02
加载中...