C++: iterator

迭代器是一个变量,可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

迭代器类别

迭代器按照定义分为以下四种

  • 正向迭代器 容器类名::iterator 迭代器名;
  • 指向常量的正向迭代器 容器类名::const_iterator 迭代器名;
  • 反向迭代器 容器类名::reverse_iterator 迭代器名;
  • 指向常量的反向迭代器 容器类名::const_reverse_iterator 迭代器名;

*迭代器名就表示迭代器指向的元素。通过非常量迭代器还能修改其指向的元素。
这里我从语言角度区分一下指向常量的迭代器const_iterator和常量迭代器vector<int>::iterator const,我们知道const修饰的常量定义时必须初始化,所以下面的error就可以理解了

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v(10);
	vector<int>::iterator it;
	for(it = v.begin(); it != v.end(); it++)
	{
		*it = it - v.begin(); // 迭代器的解引用就像指针的解引用一样
	}

	vector<int>::const_iterator cit; // 指向常量的迭代器, cit本身可变, 但*cit不能变
	for(cit = v.begin(); cit != v.end(); cit++)
	{
		cout << *cit << endl;
	}

	for(cit = v.begin(); cit != v.end(); cit++)
	{
		//*cit = 0; // error, const_iterator这种类型的迭代器指向的值是不可以更改的
	}

	vector<int>::iterator const xit; // error, const iterator自身不能改变, 所以必须对xit进行初始化
	const vector<int>::iterator yit; // error, 同上

	return 0;
}

C++迭代器:const_iterator和const形式的iterator有什么区别?

迭代器操作

迭代器都可以进行++操作。反向迭代器和正向迭代器的区别在于:

  • 对正向迭代器进行++操作时,迭代器会指向容器中的后一个元素;
  • 对反向迭代器进行++操作时,迭代器会指向容器中的前一个元素。

不同容器的迭代器功能强弱不同,分为输入、输出、正向、双向、随机访问五种

  • 正向迭代器支持++p p++ *p,两个迭代器可以互相赋值,还可以用== !=运算符比较
  • 双向迭代器还支持--p p--
    • 支持的容器: list set/multiset map/multimap
  • 随机访问迭代器还支持p +=i p-=i p+i p-i p[i] 两个随机访问迭代器还可以用< > <= >=
    • 支持的容器: vector deque

迭代器辅助函数

  • next 不改变当前迭代器,返回下一个迭代器 prev 不改变当前迭代器,返回上一个迭代器
  • advance(p,n) 迭代器p向前或向后移动n个元素
  • distance(p,q) 计算两个迭代器的距离
  • iter_swap(p, q) 用于交换两个迭代器指向的值,会改变容器的值。

C++迭代器(STL迭代器)iterator详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值