C++ Iterator迭代器介紹
迭代器可被用來訪問一個容器類的所包函的全部元素,其行為像一個指針。舉一個例子,你可用一個迭代器來實現對vector容器中所含元素的遍歷。有這麼幾種迭代器如下:
迭代器 描述
input_iterator 提供讀功能的向前移動迭代器,它們可被進行增加(++),比較與解引用(*)。
output_iterator 提供寫功能的向前移動迭代器,它們可被進行增加(++),比較與解引用(*)。
forward_iterator 可向前移動的,同時具有讀寫功能的迭代器。同時具有input和output迭代器的功能,並可對迭代器的值進行儲存。
bidirectional_iterator 雙向迭代器,同時提供讀寫功能,同forward迭代器,但可用來進行增加(++)或減少(--)操作。
random_iterator 隨機迭代器,提供隨機讀寫功能.是功能最強大的迭代器, 具有雙向迭代器的全部功能,同時實現指針般的算術與比較運算。
reverse_iterator 如同隨機迭代器或雙向迭代器,但其移動是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)
vector容器類就有一個random-access隨機迭代器,這也意味著其可以使用隨機讀寫的算法。既然隨機迭代器具有全部其它迭代器的特性,這也就是說為其它迭代器設計的算法也可被用在vector容器上。
C++ Iterator迭代器操作舉例
(本文由www.169it.com收集整理)
(1) 每種容器類型都定義了自己的迭代器類型,如vector:
1vector<
int
>::iterator iter;
//這條語句定義了一個名為iter的變量,它的數據類型是由vector<int>定義的iterator類型。
(2) 使用迭代器讀取vector中的每一個元素:
1 2 3 4 5 6vector<
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 9for
(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 3const
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 11vector<
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迭代器用法代碼舉例
set<int>::iterator it=s.find(f12/n);
find返回的是一個set的內容,不是一個迭代器。
set<int>::iterator it=s.begin();
或者set<int>::iterator it=s.end();
可以返回一個迭代器。
vector<>的迭代器並不一定是由普通指針實現,比如微軟的STL中vector的迭代器就是一個類
要返回指針,你可以使用return &(*point) ;
但是這樣很丑,而且你把elementList的內部數據暴露在客戶代碼中,破壞了封裝.
最好是返回DcmElement元素本身,代價太大就返回const DcmElement引用或者指針.
後者仍然容易引起懸垂句柄.