读书人

这个算法怎么理解啊

发布时间: 2012-09-09 09:27:54 作者: rapoo

这个算法如何理解啊?
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大于的元素。

这个算法 理解不了啊



[解决办法]

C/C++ code
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的数据地址;}解释完毕; 

读书人网 >C语言

热点推荐