我們今天在這裡為大家介紹的是C++迭代器的一些基本概念,希望大家可以從這篇文章中學到一些有用的內容,從而提高自己的編程效率。首先我們要清楚,C++迭代器是一種檢查容器內元素並遍歷元素的數據類型。
標准庫為每一種標准容器包括 vector)定義了一種迭代器類型。迭代器類型提供了比下標操作更通用化的方法:所有的標准庫容器都定義了相應的迭代器類型,而只有少數的容器支持下標操作。因為迭代器對所有的容器都適用,現代 C++ 程序更傾向於使用迭代器而不是下標操作訪問容器元素,即使對支持下標操作的 vector 類型也是這樣。
容器的 iterator 類型
每種容器類型都定義了自己的C++迭代器類型,如 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 操作返回的C++迭代器指向 vector 的“末端元素的下一個”。“超出末端迭代器”off-the-end iterator)。表明它指向了一個不存在的元素。如果 vector 為空,begin 返回的迭代器與 end 返回的迭代器相同。
由 end 操作返回的迭代器並不指向 vector 中任何實際的元素,相反,它只是起一個哨兵sentinel)的作用,表示我們已處理完 vector 中所有元素。
vector 迭代器的自增和解引用運算
C++迭代器類型定義了一些操作來獲取迭代器所指向的元素,並允許程序員將迭代器從一個元素移動到另一個元素。迭代器類型可使用解引用操作符dereference operator)*)來訪問迭代器所指向的元素:
*iter = 0;
解引用操作符返回迭代器當前所指向的元素。假設 iter 指向 vector 對象 ivec 的第一元素,那麼 *iter 和ivec[0] 就是指向同一個元素。上面這個語句的效果就是把這個元素的值賦為 0。迭代器使用自增操作符1.4.1 節)向前移動迭代器指向容器中下一個元素。從邏輯上說,C++迭代器的自增操作和int 型對象的自增操作類似。對 int 對象來說,操作結果就是把 int 型值“加 1”,而對迭代器對象則是把容器中的迭代器“向前移動一個位置”。因此,如果 iter 指向第一個元素,則 ++iter 指向第二個元素。
由於 end 操作返回的迭代器不指向任何元素,因此不能對它進行解引用或自增操作。
示例程序:編寫程序來創建有10個元素的vector對象
- #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;
- }
以上就是C++迭代器相關內容的介紹。