这个算法如何理解啊?
template <class ForwardIterator, class T>
ForwardIterator lower_bound ( ForwardIterator first, ForwardIterator last, const T& value )
{
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<value)
{ first=++it; count-=step+1; }
else count=step;
}
return first;
}
函数功能:查找一个有序的容器(如vector,list,等),第一个比value大于的元素。
这个算法 理解不了啊
[解决办法]
template <class ForwardIterator, class T> ForwardIterator lower_bound ( ForwardIterator first, ForwardIterator last, const T& value )//迭代器参数为first指向你的数据首地址,value为查找值{ 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<value) //判断中间值是否小于查找值,小于则执行if { first=++it;// 首地址变为中间地址的下一个地址了 count-=step+1; //求出从剩下的元素个数(中间位置的下一个位置开始数) } else count=step;//大于时就元素设置为中间位置,以便于下一次类似二分查找 } return first;//返回一个大于多等于value的数据地址;}解释完毕;