您的位置:首页 > 其它

迭代器

2015-12-03 20:28 267 查看
迭代器

迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。

迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。可以使用++操作符。

指针迭代器

正如下面小程序,一个指针也是一种迭代器。

程序:

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

#define SIZE 100
int iarray[SIZE];

int main()
{
iarray[20] = 50;
int* ip = find(iarray, iarray + SIZE, 50);
if (ip == iarray + SIZE)
cout << "50 not found in array" << endl;
else
cout << *ip << " found in array" << endl;
return 0;
}


输出:



该程序显示了如何把指针作为迭代器用于STL的find()算法来搜索普通的数组。

int* ip = find(iarray, iarray + SIZE, 50);


find()函数接收三个参数。前两个定义了搜索的范围,第三个参数是待定位的值。

2.容器迭代器

和将迭代器申明为指针变量不同的是,可以使用容器类方法来获取迭代器对象。两个典型的容器类方法是begin()和end(),它们在大多数容器中表示整个容器的范围。

下面程序创建了一个矢量容器,并使用迭代器在其中搜索:

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

vector<int>Vector(100);
void main()
{
Vector[20] = 50;
vector<int>::iterator Iter=
find(Vector.begin(), Vector.end(), 50);
if (Iter != Vector.end())
cout << "Vector contains value " << *Iter << endl;
else
cout << "Vector does not contain 50" << endl;
}


输出:



3.常量迭代器

和指针一样,可以给一个迭代器赋值。例如,首先申明一个迭代器:

vector<int>::iterator first;


该语句创建了一个
vector<int>
类的迭代器。

下面语句将迭代器设置到intvector的第一个对象,并将指向的对象值设置为123:

first = intVector.begin();
*first = 123;


这种赋值对于大多数容器类都是允许的,除了只读变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: