3.迭代器简单介绍
除了使用下标来訪问vector对象的元素外,标准库还提供了訪问元素的方法:使用迭代器。迭代器是一种检查容器内元素而且遍历元素的数据类型。
百科释义:
迭代器(iterator)是一种对象,它可以用来遍历标准模板库容器中的部分或所有元素,每一个迭代器对象代表容器中的确定的地址。迭代器改动了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。
1.容器的iterator类型
每种容器类型都定义了自己的迭代器类型,如vector:
vector<int> ::iterator iter;变量名为iter,能够读写vector中的元素。
2.begin和end操作
每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。假设容器中有元素的话,由begin返回的元素指向第一个元素。
vector<int>::iterator iter=v.begin();
若v不为空,iter指向v[0]。
由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的同样。
*iter;返回迭代器iter所指元素的引用
++iter即将迭代器向前移动一个位置(相反的--iter)
==和!=操作符来比較两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不想等。
举例:
#include <iostream>
#include<vector>
using namespace std;
int main (){
<span style="white-space:pre"> </span>vector <int>p;
<span style="white-space:pre"> </span>p.push_back(1);
<span style="white-space:pre"> </span>p.push_back(2);
<span style="white-space:pre"> </span>p.push_back(3);
<span style="white-space:pre"> </span>p.push_back(5);
<span style="white-space:pre"> </span>p.push_back(6);
<span style="white-space:pre"> </span>auto *ite=p.begin();//auto也可写为vector <int>::iterator
<span style="white-space:pre"> </span>while(ite!=p.end())
<span style="white-space:pre"> </span>cout<<*ite++<<endl;
<span style="white-space:pre"> </span>return 0;
}
我们认定某个类型是迭代器当且仅当它支持一套操作,这套操作使得我们能訪问容器的元素或者从一个元素移动到另外一个元素。