#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<limits.h>
#include<set>
#include<algorithm>
#include <bitset>
using namespace std;
int main()
{
vector<int> tes;
for(int i=1;i<=10;i++)
{
tes.push_back(i);
}
vector<int>::iterator beg=tes.begin();
vector<int>::iterator end=tes.end();
// cout<<end-beg<<endl; //长度 为10 如果beg-end则为-10
// cout<<end + beg<<endl; //不能相加 会报错 只支持减法
// cout<<(end-beg)/2<<endl;//一半长度
// cout<<*(beg+(end-beg)/2)<<endl; //得到中间位置的迭代器 并解引用
//二分法 迭代器
int findn;
cin>>findn;
//这里要注意mid的取值 必须要从beg开始 ,vector不同于数组,没有规定起点就会报错
//不同于索引使用加法,以beg为起点用减法同样可以找出中点 可以用笔验算下
vector<int>::iterator mid=beg+(end-beg)/2;
while(mid!=end&& *mid!=findn)
{
if(findn==*mid) break;
if(findn<*mid)
end=mid-1;
else
beg=mid+1;
mid=beg+(end-beg)/2;
}
cout<<"ans"<<*mid<<endl;
//迭代器操作
// vector<int>::iterator iter=tes.begin();
// iter++;
// 解引用
// cout<<"*it "<<*iter<<endl;
// cout<<"it "<< iter<<endl;//报错
}
[c++] 迭代器的一些测试(迭代器二分)
最新推荐文章于 2024-03-06 10:08:51 发布