日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++迭代器简介

發布時間:2023/12/2 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++迭代器简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。