STL迭代器模版详解

1.STL iterator迭代器

STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>

 

目录

1.STL iterator迭代器

1.1 迭代器的基本概念

1.2 迭代器的类型

1.2.1 输出迭代器

1.2.2 输入迭代器

1.2.3 前向迭代器

1.2.4 双向迭代器

1.2.5 随机迭代器

1.3 STL 容器那些支持迭代


1.1 迭代器的基本概念

迭代器相当于指向容器元素的指针,它在容器内可以向前移动,也可以做向前或向后双向移动。有专为输入元素准备的迭代器,有专为输出元素准备的迭代器,还有可以进行随机操作的迭代器,这为访问容器提供了通用方法。

迭代器扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

 

1.2 迭代器的类型

迭代器的类型可分为:输出迭代器,输入迭代器,前向迭代器,双向迭代器,随机迭代器。

迭代器功能描述
输入迭代器提供对数据的只读访问只读,支持++、==、!=
输出迭代器提供对数据的只写访问只写,支持++
前向迭代器提供读写操作,并能向前推进迭代器读写,支持++、==、!=
双向迭代器提供读写操作,并能向前和向后操作读写,支持++、–,
随机访问迭代器提供读写操作,并能以跳跃的方式访问容器的任意数据,是功能最强的迭代器读写,支持++、–、[n]、-n、<、<=、>、>=

1.2.1 输出迭代器

输出迭代器只用于写一个序列,它可以进行递增和提取操作。

代码示例:

    vector<int> intVect;
	for (int i = 0; i < 10; i++)
	{
		intVect.push_back(i);
	}

	cout << "Vect:" << endl;
	vector<int>::iterator it = intVect.begin();
	while (it != intVect.end())
		cout << *it++ << endl;

 

1.2.2 输入迭代器

输入迭代器只用于读一个序列,它可以进行递增、提取和比较操作。

代码示例如下:

    vector<int> intVect(5);
	vector<int>::iterator In = intVect.begin();
	*In++ = 1;
	*In++ = 3;
	*In++ = 5;
	*In++ = 7;
	*In = 9;
	cout << "Vect:";
	vector<int>::iterator it = intVect.begin();
	while (it != intVect.end())
	{
		cout << *it++ << ' ';
	}
	cout << endl;

1.2.3 前向迭代器

前向迭代器可以用于读,也可以用于写,它不仅具有输入和输出迭代器的功能,还具有保存其值的功能,从而能够从迭代器原来的位置开始重新遍历序列。

实例代码如下:

    vector<int> intVect(5);
	vector<int>::iterator it = intVect.begin();
	vector<int>::iterator saveit = it;
	*it++ = 2;
	*it++ = 4;
	*it++ = 6;
	*it++ = 8;
	*it = 10;
	cout << "Vect:";
	while (saveit != intVect.end())
		cout << *saveit++ << ' ';
	cout << endl;

 

1.2.4 双向迭代器

双向迭代器既可以用于读,也可以用于写,它与前向迭代器类似,只是双向迭代器可以做递增和递减操作。

代码示例如下:

    vector<int> intVect(5);
	vector<int>::iterator it = intVect.begin();
	vector<int>::iterator saveit = it;
	*it++ = 1;
	*it++ = 3;
	*it++ = 5;
	*it++ = 7;
	*it = 9;
	cout << "Vect:";
	while (saveit != intVect.end())
		cout << *saveit++ << ' ';
	cout << endl;

	do
	{
		cout << *--saveit << endl;
	} while (saveit!= intVect.begin());

	cout << endl;

1.2.5 随机迭代器

随机访问迭代器是最强大的迭代器类型,不仅具有双向迭代器的所有功能,还能使用指针的算术运算和所有比较算法。

代码示例如下:

    vector<int> intVect(5);
	vector<int>::iterator it = intVect.begin();
	*it++ = 1;
	*it++ = 3;
	*it++ = 5;
	*it++ = 7;
	*it = 9;
	cout << "Vect:";
	for (it = intVect.begin(); it != intVect.end(); it++)
	{
		cout << *it << ' ';
	}
	it = intVect.begin();
	*(it + 2) = 100;
	cout << endl;
	cout << "Vect :";
	for (it = intVect.begin(); it != intVect.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;

1.3 STL 容器那些支持迭代

容器vectordequelistset/multisetmap.multimapstackqueue

priority_queue

是否支持迭代器

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值