C++学习笔记-STL标准模板库(二)STL迭代器iterator

迭代器介绍(iterator)

迭代器是一种抽象的设计概念,iterator模式定义如下:
提供一种方法,使之能够依序访问某个聚合物所含的各个元素,从而无需暴露该聚合物的内部表述方式迭。迭代器是指针的泛化,最重要就是对operator*和operator->进行重载。它允许程序员用相同的方式处理不同的数据结构(容器)。

头文件

所有容器有含有其各自的迭代器型别(iterator types),所以当你使用一般的容器迭代器时,并不需要含入专门的头文件。不过有几种特别的迭代器,例如逆向迭代器,被定义于 <iterator> 中。

类型

迭代器共分为五种,分别为: 输入迭代器(Input iterator)、输出迭代器(Output iterator)、前向迭代器(Forward iterator)、双向迭代器(Bidirectional iterator)、随机存取迭代器(Random access iterator)。

1. 输入迭代器:只读,一次传递

可为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越末尾的值。总是,输入迭代器可以对读操作的结果进行解析(对每个值仅解析一次),然后向前移动。

2、输出迭代器:只写,一次传递

这是对输入迭代器的补充,不过是写操作而不是读操作。为输出迭代器的预定义实现只有ostream_iterator和ostreambuf_iterator,用于向一个输出流ostream写数据,还有一个一般较少使用的raw_storage_iterator。他们只能对每个写出的值进行一次解析,并且只能向前移动。对于输出迭代器来说,没有使用超越末尾的值来结束的概念。总之,输出迭代器可以对写操作的值进行解析(对每一个值仅解析一次),然后向前移动。

3、前向迭代器:多次读/写

前向迭代器包含了输入和输出迭代器两者的功能,加上还可以多次解析一个迭代器指定的位置,因此可以对一个值进行多次读/写。顾名思义,前向迭代器只能向前移动。没有为前向迭代器预定义迭代器。

4、双向迭代器:operator–

双向迭代器具有前向迭代器的全部功能。另外它还可以利用自减操作符operator–向后一次移动一个位置。由list容器中返回的迭代器都是双向的。

用法

迭代器中用来表现容器中的某个位置

operator * :返回当前位置上的原始值。如果该元素拥有成员,可用->取用他它们。
operator ++ :返回当前位置上的元素值,有些迭代器还可以使用operator --退至前一元素。(注:“前置++”比“后置++”效率高)
operator ==!=:判断两个迭代器是否指向同一位置。
operator = :对迭代器赋值。
begin():返回一个迭代器,指向容器起点,即第一个元素的位置。end():则指向最后一个元素的下一个位置。

	vector<int> a(10,10);
	vector<int>::iterator it_1 = a.begin();
	for (; it_1 != a.end(); it_1++)
	{
		cout << *it_1 << endl;
	}

	deque<int> b(10,10);
	deque<int>::iterator it_2 = b.begin();

	list<int> c(10,10);
	list<int>::iterator it_3;
	for (it_3 = c.begin(); it_3 != c.end(); it_3++)
	{
		cout << *it_3 << endl;
	}
	set<char> s;
	set<char>::iterator it_Set = s.begin();

	map<int, int> m;
	m.insert(make_pair(3, 5));
	map<int, int>::iterator it_m = m.begin();
	for (it_m = m.begin(); it_m != m.end(); it_m++)
	{
		cout << (*it_m).first << " ";
		cout << (*it_m).second << endl;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值