二分搜索
要求:从有序序列中寻找某个给定的值
方法:使用迭代器,从序列中间位置开始搜索;继续二分
//text必须有序
auto beg=text.begin(),end=text.end();
auto mid=text.begin()+(end-beg)/2; //迭代器,初始状态下的中间点
//当还有元素尚未检查并且还没有找到sought时执行循环
while(mid!=end && *mid!=sought)
{
if(*mid<sought) //sought大于中点值
{
beg=mid+1; //mid已经检查过了,从mid+1位置开始
}
else //sought小于等于中点的值
{
end=mid; //忽略掉后半部分
}
mid=beg+(end-beg)/2; //不能写成mid=(beg+end)/2,因为C++并没有定义两个迭代器的加法运算,这样是没有意义的
}