C++ Iterator迭代器介紹html
迭代器可被用來訪問一個容器類的所包函的所有元素,其行爲像一個指針。舉一個例子,你可用一個迭代器來實現對vector容器中所含元素的遍歷。有這麼幾種迭代器以下:ios
迭代器 描述 算法
input_iterator 提供讀功能的向前移動迭代器,它們可被進行增長(++),比較與解引用(*)。dom
output_iterator 提供寫功能的向前移動迭代器,它們可被進行增長(++),比較與解引用(*)。spa
forward_iterator 可向前移動的,同時具備讀寫功能的迭代器。同時具備input和output迭代器的功能,並可對迭代器的值進行儲存。設計
bidirectional_iterator 雙向迭代器,同時提供讀寫功能,同forward迭代器,但可用來進行增長(++)或減小(--)操做。指針
random_iterator 隨機迭代器,提供隨機讀寫功能.是功能最強大的迭代器, 具備雙向迭代器的所有功能,同時實現指針般的算術與比較運算。code
reverse_iterator 如同隨機迭代器或雙向迭代器,但其移動是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)htm
vector容器類就有一個random-access隨機迭代器,這也意味着其能夠使用隨機讀寫的算法。既然隨機迭代器具備所有其它迭代器的特性,這也就是說爲其它迭代器設計的算法也可被用在vector容器上。對象
C++ Iterator迭代器操做舉例
(本文由www.169it.com收集整理)
(1) 每種容器類型都定義了本身的迭代器類型,如vector:
1
|
vector<
int
>::iterator iter;
//這條語句定義了一個名爲iter的變量,它的數據類型是由vector<int>定義的iterator類型。
|
(2) 使用迭代器讀取vector中的每個元素:
1
2
3
4
5
6
|
vector<
int
> ivec(10,1);
for
(vector<
int
>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2;
//使用 * 訪問迭代器所指向的元素
}
const_iterator:
|
只能讀取容器中的元素,而不能修改。
1
2
3
4
5
6
7
8
9
|
for
(vector<
int
>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<
int
>::const_iterator 和
const
vector<
int
>::iterator的區別
const
vector<
int
>::iterator newiter=ivec.begin();
*newiter=11;
//能夠修改指向容器的元素
//newiter++; //迭代器自己不能被修改
|
(3) iterator的算術操做:
iterator除了進行++,--操做,能夠將iter+n,iter-n賦給一個新的iteraor對象。還能夠使用一個iterator減去另一個iterator.
1
2
3
|
const
vector<
int
>::iterator newiter=ivec.begin();
vector<
int
>::iterator newiter2=ivec.end();
cout<<
"\n"
<<newiter2-newiter;
|
一個很典型使用vector的STL代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <vector>
#include <iostream>
using
namespace
std;
int
main()
{
vector<
int
> ivec;
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
ivec.push_back(4);
for
(vector<
int
>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
cout << *iter << endl;
}
|
以下代碼對vector容器對象生成和使用了迭代器:
1
2
3
4
5
6
7
8
9
10
11
|
vector<
int
> the_vector;
vector<
int
>::iterator the_iterator;
for
(
int
i=0; i < 10; i++ )
the_vector.push_back(i);
int
total = 0;
the_iterator = the_vector.begin();
while
( the_iterator != the_vector.end() ) {
total += *the_iterator;
the_iterator++;
}
cout <<
"Total="
<< total << endl;
|
提示:經過對一個迭代器的解引用操做(*),能夠訪問到容器所包含的元素。
文章轉載自:[169IT-最新最全的IT資訊]
本文標題:C++ Iterator迭代器介紹及Iterator迭代器用法代碼舉例