迭代器iterator

iterator
n. 迭代器;迭代程序
(有道翻译)

用法

初始化
	vector<int> iv = { 100, 200, 300 };
	vector<int>::iterator iter;  //定义迭代器, 类型同样为vector<int>
	
begin()/end()和rbegin()/rend()

用于返回迭代类型

	iter = iv.begin(); //如果容器中有元素, 指向容器中的第一个元素
	
	iter = iv.end(); //end返回的迭代器指向的并不是末端元素,而是末端元素的后面, end()指向一个不存在的元素

//如果容器为空, 那么begin()和end()返回的迭代器就相同
//end()可以作为结束标记,如果begin()遍历到最后与end()相等,那么可以确定遍历结束

在这里插入图片描述

反向迭代器

reverse_iterator
n. 逆向;相反;背面;

vector<int>::reverse_iterator riter;

在这里插入图片描述

for遍历方式
	for (iter = iv.begin(); iter != iv.end(); iter++)
	{
		cout << *iter << endl;
	}
	
	//反向迭代器
		for (vector<int>::reverse_iterator riter = iv.rbegin(); riter != iv.rend(); riter++)
	{
		cout << *riter << endl;
	}
	//输出
	/*100
	200
	300
	300
	200
	100*/
迭代器运算符

a) *iter: 返回迭代器iter锁指向的元素的引用,必须保证迭代器指向的是有效的元素

b) iter++; ++iter:让迭代器指向容器中的下一个元素

c) iter–; --iter: 指向上一个元素

d) 结构成员引用示例

	struct student{
		int num = 0;
	};
	vector<student> sv;
	student mystu;
	mystu.num = 100;
	sv.push_back(mystu);

	vector<student>::iterator iter;
	iter = sv.begin();
	cout << (*iter).num << endl; //100
	cout << iter->num << endl;   //100
const_iterator

常量迭代器,同上,只读不可写

cbegin 和 cend

C11引入的两个新函数,与begin和end类似,不管容器是否是常量容器,cbegin,cend都是常量迭代器

	vector<int> iv = {100, 200, 300};
	
	for(auto iter = iv.cbegin(); iter != cend(); ++iter)
	{
		*iter = 50; //错误, 不能给常量赋值
		cout << *iter << endl;
	}	
迭代器失效

在操作迭代器的过程中,使用迭代器这种循环体,不要改变vector的容量, 也就是不要增加或者删除vector容器中的元素.

for (auto beg = iv.begin(), end = iv.end(); beg != end; ++beg)
{
	//iv.push_back(111); //执行会报错
	cout << *beg << endl;
}
	vector<int> iv = {100, 200, 300};
	vector<int>::iterator iter;
	for (auto iter = iv.begin(); iter != iv.end(); iter++)
	{
		iv.erase(iter); //erase函数, 移除iter位置上的元素, 返回下一个元素的位置
		//错误,迭代器失效
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值