如题,我发现 s.lowerbound(v) 和 lowerbound(s.begin(), s.end(), v) 的运行效率差了很多。
据同学说后者是 O(n2) 的,但是我查了 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 不是随机访问迭代器的原因?