C++知识点5——迭代器简述

迭代器初步

迭代器就是专门用来访问容器的指针,简单来讲,迭代器就是指针

 

迭代器中两个重要成员函数

1.begin,begin函数返回容器中第一个成员的迭代器(地址),

2.end,end函数返回容器最后一个元素的下一个位置的迭代器(地址),所以end返回的迭代器也叫尾后迭代器

3.如果容器为空,那么begin和end都返回尾后迭代器

 

迭代器遍历string

void traversestringbyitor()
{
	string s="123456778";
	for (string::iterator it=s.begin();it!=s.end();++it)
	{
		cout<<*it<<endl;//对迭代器解引用
	}
}

 

每个容器中都有迭代器,但是使用容器类型加上作用域运算符进行区分

vector<int>::iterator it;//vector<int>的迭代器
vector<string>::iterator it;//vector<string>的迭代器
string::iterator it;//字符串的迭代器

 

const_iterator迭代器

C++中,可以用const_iterator来遍历容器,const_iterator指向的元素只读,不可修改,但是const_iterator本身可以变,类似于指向const变量的指针

 

当我们修改const_iterator指向的元素时会报错

void testconstitor()
{
	vector<int> v(10,-5);
	vector<int>::const_iterator it=v.begin();
	*it=1;
}

 

使用const_iterator遍历const vector<int>

void testconstitor()
{
	const vector<int> cv(10,-5);
	for (vector<int>::const_iterator cit=cv.begin();
		cit!=cv.end();++cit) {
		cout<<*cit<<endl;
	}
}

用迭代器遍历string时,begin返回iterator,遍历const vector<int>时,begin返回const_iterator。

所以,begin可以遍历const容器对象,也可以遍历非const容器对象,其返回值视容器对象的类型而定(对象是const,返回const_iterator,非const,返回iterator)

 

如果容器对象的类型不是const的,那么用iterator和const_iterator均可,如果是const的,只能用const_iterator遍历

使用const_iterator遍历vector<int>

void testconstitor()
{
	vector<int> v(10,-5);
	for (vector<int>::const_iterator it=v.begin();
		it!=v.end();++it) {
		cout<<*it<<endl;
	}
}

结果同上

 

如果用iterator去遍历const容器对象,无法编译通过(因为这样可以通过迭代器修改容器中的元素,违背const变量无法修改的原则)

void testconstitor()
{
	const vector<int> cv(10,-5);
	for(vector<int>::iterator it=cv.begin(); 
		it!=cv.end();++it){
		cout<<*it<<endl;
	}
}

 

使用迭代器对已排序的vector进行二分查找

int searchbyitor(const vector<int> nums, int target)
{
	vector<int>::const_iterator beg=nums.begin();
	vector<int>::const_iterator end=nums.end();
	vector<int>::const_iterator mid=beg+(end-beg)/2;

	int res=0;
	while(beg!=end) {
		if (*mid==target) {
			cout<<"find it"<<endl;
			res=*mid;
			break;
		}
		else if (*mid>target) {
			end=mid;
		}
		else {
			beg=mid+1;
		}
		mid=beg+(end-beg)/2;
	}

	if (res!=target) cout<<"not find it"<<endl;

	return res;
}

当调用searchbyitor({1,2,3,4,5},-1);时

输出结果

当调用searchbyitor({1,2,3,4,5},1)或者searchbyitor({1,2,3,4,5},5)时

输出结果

当调用searchbyitor({1,2,3,4,5},2)时

输出结果

证明该程序基本可靠。上述程序用的迭代器是const_iterator

 

参考:

《C++ Primer》

 

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值