首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个算法怎么理解啊

2012-09-09 
这个算法如何理解啊?template class ForwardIterator, class TForwardIterator lower_bound ( ForwardIt

这个算法如何理解啊?
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的数据地址;}解释完毕; 

热点排行