溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中如何使用迭代器

發(fā)布時(shí)間:2021-07-19 17:43:45 來源:億速云 閱讀:97 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關(guān)C++中如何使用迭代器,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

標(biāo)準(zhǔn)庫為每一種標(biāo)準(zhǔn)容器(包括 vector)定義了一種迭代器類型。迭代器類型提供了比下標(biāo)操作更通用化的方法:所有的標(biāo)準(zhǔn)庫容器都定義了相應(yīng)的迭代器類型,而只有少數(shù)的容器支持下標(biāo)操作。因?yàn)榈鲗λ械娜萜鞫歼m用,現(xiàn)代 C++ 程序更傾向于使用迭代器而不是下標(biāo)操作訪問容器元素,即使對支持下標(biāo)操作的 vector 類型也是這樣。

容器的 iterator 類型

每種容器類型都定義了自己的C++迭代器類型,如 vector:vector<int>::iterator iter;這符語句定義了一個(gè)名為 iter 的變量,它的數(shù)據(jù)類型是 vector<int> 定義的 iterator 類型。每個(gè)標(biāo)準(zhǔn)庫容器類型都定義了一個(gè)名為 iterator 的成員,這里的 iterator 與迭代器實(shí)際類型的含義相同。

begin 和 end 操作每種容器都定義了一對命名為 begin 和 end 的函數(shù),用于返回迭代器。如果容器中有元素的話,由 begin 返回的迭代器指向***個(gè)元素: vector<int>::iterator iter = ivec.begin();

上述語句把 iter 初始化為由名為 vector 操作返回的值。假設(shè) vector 不空,初始化后,iter 即指該元素為ivec[0]。

由 end 操作返回的C++迭代器指向 vector 的“末端元素的下一個(gè)”?!俺瞿┒说鳌保╫ff-the-end iterator)。表明它指向了一個(gè)不存在的元素。如果 vector 為空,begin 返回的迭代器與 end 返回的迭代器相同。

由 end 操作返回的迭代器并不指向 vector 中任何實(shí)際的元素,相反,它只是起一個(gè)哨兵(sentinel)的作用,表示我們已處理完 vector 中所有元素。

vector 迭代器的自增和解引用運(yùn)算

C++迭代器類型定義了一些操作來獲取迭代器所指向的元素,并允許程序員將迭代器從一個(gè)元素移動(dòng)到另一個(gè)元素。迭代器類型可使用解引用操作符(dereference operator)(*)來訪問迭代器所指向的元素:

*iter = 0;

解引用操作符返回迭代器當(dāng)前所指向的元素。假設(shè) iter 指向 vector 對象 ivec 的***元素,那么 *iter 和ivec[0] 就是指向同一個(gè)元素。上面這個(gè)語句的效果就是把這個(gè)元素的值賦為 0。迭代器使用自增操作符(1.4.1 節(jié))向前移動(dòng)迭代器指向容器中下一個(gè)元素。從邏輯上說,C++迭代器的自增操作和int 型對象的自增操作類似。對 int 對象來說,操作結(jié)果就是把 int 型值“加 1”,而對迭代器對象則是把容器中的迭代器“向前移動(dòng)一個(gè)位置”。因此,如果 iter 指向***個(gè)元素,則 ++iter 指向第二個(gè)元素。

由于 end 操作返回的迭代器不指向任何元素,因此不能對它進(jìn)行解引用或自增操作。

示例程序:編寫程序來創(chuàng)建有10個(gè)元素的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';   }   //把每個(gè)值乘以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++中如何使用迭代器,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI