C++迭代器简介
迭代器是一種檢查容器內元素并遍歷元素的數據類型。
?
標準庫為每一種標準容器(包括?vector)定義了一種迭代器類型。迭代器類型提供了比下標操作更通用化的方法:所有的標準庫容器都定義了相應的迭代器類型,而只有少數的容器支持下標操作。因為迭代器對所有的容器都適用,現代?C++?程序更傾向于使用迭代器而不是下標操作訪問容器元素,即使對支持下標操作的?vector?類型也是這樣。
?
容器的?iterator?類型
每種容器類型都定義了自己的迭代器類型,如?vector:vector<int>::iterator iter;這符語句定義了一個名為?iter?的變量,它的數據類型是?vector<int>?定義的?iterator?類型。每個標準庫容器類型都定義了一個名為?iterator?的成員,這里的?iterator?與迭代器實際類型的含義相同。
begin?和?end?操作
每種容器都定義了一對命名為?begin?和?end?的函數,用于返回迭代器。如果容器中有元素的話,由?begin?返
回的迭代器指向第一個元素:
vector<int>::iterator iter = ivec.begin();上述語句把?iter?初始化為由名為?vector?操作返回的值。假設?vector?不空,初始化后,iter?即指該元素為
?ivec[0]。
由?end?操作返回的迭代器指向?vector?的“末端元素的下一個”。“超出末端迭代器”(off-the-end iter
ator)。表明它指向了一個不存在的元素。如果?vector?為空,begin?返回的迭代器與?end?返回的迭代器相同。
由?end?操作返回的迭代器并不指向?vector?中任何實際的元素,相反,它只是起一個哨兵(sentinel)的作用,
表示我們已處理完?vector?中所有元素。
?
vector?迭代器的自增和解引用運算
迭代器類型定義了一些操作來獲取迭代器所指向的元素,并允許程序員將迭代器從一個元素移動到另一個元素。
迭代器類型可使用解引用操作符(dereference operator)(*)來訪問迭代器所指向的元素:
*iter = 0; 解引用操作符返回迭代器當前所指向的元素。假設?iter?指向?vector?對象?ivec?的第一元素,那么?*iter?和 ?ivec[0]?就是指向同一個元素。上面這個語句的效果就是把這個元素的值賦為?0。迭代器使用自增操作符(1.4.1?節)向前移動迭代器指向容器中下一個元素。從邏輯上說,迭代器的自增操作和
?int?型對象的自增操作類似。對?int?對象來說,操作結果就是把?int?型值“加?1”,而對迭代器對象則是把容
器中的迭代器“向前移動一個位置”。因此,如果?iter?指向第一個元素,則?++iter?指向第二個元素。
由于?end?操作返回的迭代器不指向任何元素,因此不能對它進行解引用或自增操作。
?
示例程序:編寫程序來創建有10個元素的vector對象,用迭代器把每個
?
?
Code#include?<iostream>
#include?<vector>
using?namespace?std;
int?main()
{
????//定義并賦值輸出
????vector<int>?ivec;
????cout<<"Befort?*2?the?elements?are:"<<endl;
????for(vector<int>::size_type?ix=0;ix!=10;++ix){
????????ivec.push_back(ix);
????????cout<<ivec[ix]<<'\t';
????}
????//把每個值乘以2并輸出
????cout<<endl<<"After?*2?the?elements?are:"<<endl;
????for(vector<int>::iterator?iter=ivec.begin();iter!=ivec.end();++iter){
????????*iter*=2;
????????cout<<*iter<<'\t';
????}
????return?0;
}
?
轉載于:https://www.cnblogs.com/wyj553/archive/2009/05/31/1492760.html
總結
- 上一篇: 象素图和向量图
- 下一篇: [C++ rudiment][转]typ