欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++迭代器怎么用-創(chuàng)新互聯(lián)

這篇文章主要介紹了C++迭代器怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供清河網(wǎng)站建設(shè)、清河做網(wǎng)站、清河網(wǎng)站設(shè)計(jì)、清河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、清河企業(yè)網(wǎng)站模板建站服務(wù),十載清河做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

一、迭代器的特點(diǎn)

  • 迭代器是一種智能指針,具有遍歷復(fù)雜數(shù)據(jù)結(jié)構(gòu)的能力

  • 不同的容器有不一樣的內(nèi)部結(jié)構(gòu),因此會(huì)有一樣的迭代器類型

  • 迭代器定義后,并不屬于某一實(shí)例容器對(duì)象,只要是屬于該迭代器類型的容器類型都可用

迭代器的分類

C++的STL定義了5種迭代器

  • 輸入迭代器:提供了對(duì)其指向元素的只讀操作以及前++和后++操作符

  • 輸出迭代器:提供了對(duì)其指向元素的寫操作和++操作符

  • 向前迭代器:具有++操作符

  • 雙向迭代器:既具有++操作符也具有--操作符

  • 隨機(jī)訪問(wèn)迭代器:是一般的迭代器,既可以隨機(jī)的實(shí)現(xiàn)跳躍跳動(dòng),也可以通過(guò)指針?biāo)阈g(shù)運(yùn)算來(lái)實(shí)現(xiàn)跳躍移動(dòng)

二、迭代器的使用

1.原理:迭代器定義之后,可指向指定類型容器內(nèi)的元素,從而達(dá)到訪問(wèn)容器內(nèi)元素的能力

2.用法

  • 關(guān)鍵字interator代表聲明一個(gè)迭代器,前面需要指明類型

  • 迭代器指向容器的某一位置

  • 通過(guò)*解引用獲取元素的引用(注:*得到的是元素的引用)。也可用->得到該元素的成員(下面代碼會(huì)介紹)

string s= "HelloWorld";
string::iterator i; //一個(gè)string類型的迭代器
for (i = s.begin(); i != s.end(); i++)
{
  cout << *i;
}

3.解引用和成員訪問(wèn)

注意:訪問(wèn)成員時(shí),要對(duì)迭代器加上(),否則產(chǎn)生的意義不同

(*item).empty(); //正確用法
*item.empty; //錯(cuò)誤用法

上面代碼中:第一行是解引用迭代器。而第二種是試圖訪問(wèn)item中的empty成員,但是item是個(gè)迭代器,顯示是錯(cuò)誤的

三、interator、const_iterator 

1.迭代器的核心關(guān)鍵字

屬于容器的內(nèi)部成員,通過(guò)作用域限定符::訪問(wèn)

2.分類

  • interator:當(dāng)我們需要對(duì)容器元素進(jìn)行修改、刪除等操作時(shí)或者對(duì)象是非常量時(shí)使用

  • const_iterator:當(dāng)我們只是遍歷容器元素,而不更改容器元素時(shí)或者對(duì)象是常量時(shí)使用

注意:上面所說(shuō)的常量是指常量容器,而不是容器內(nèi)的元素為常量

3.兩者的選擇

建議:如果我們只是簡(jiǎn)單的遍歷容器元素或者對(duì)象是常量時(shí),一般使用const_iterator比較合適

4.C++11標(biāo)準(zhǔn):cbegin()、cend()

C++11引進(jìn)了兩個(gè)新函數(shù),分別為cbegin()、cend(),其兩者的功能類似于begin()、end()

C++11標(biāo)準(zhǔn)之前,iterator與const_iterator都使用begin()、end()兩個(gè)輔助函數(shù)遍歷容器。

C++11標(biāo)準(zhǔn)之后,const_iterator既可以使用可以使用begin()、end(),也可以使用cbegin()、cend()。但是iterator還是只能使用begin()、end()

vector<int> v;
const vector<int> v2;
auto it1=v.begin(); //v1是vector<int>::iterator類型
auto it2=v2.cbegin();//v2是vector<int>::const_iterator類型

四、reverse_interator、const_reverse_interator

1.概念

標(biāo)準(zhǔn)模板庫(kù)容器的逆序迭代器

功能與interator、const_iterator均相同,但是用法不一樣

2.兩者區(qū)別

  • reverse_interator:與interator相同,改變?nèi)萜鲀?nèi)部元素時(shí)使用。只能使用rbegin()、rend()

  • const_reverse_interator:與const_iterator相同,只是單純遍歷容器內(nèi)部元素時(shí)使用。能使用rbegin()、rend()、crbegin()、crend()

3.用法

用法的原理與interator、const_iterator是相同的

但是rbegin()、rend()分別指向容器元素的最后一個(gè)位置與第一個(gè)元素的前一個(gè)位置

//for循環(huán)打印的是3、2、1
 
vector<int> v;
vector<int>::const_reverse_iterator iter;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (iter = v.rbegin(); iter != v.rend(); iter++)
    printf("%d\t", *iter);

五、begin()、end()、cbegin()、cend()

4者都是容器的成員函數(shù)

cbegin()與cend()與begin()和end()原理相同,下面只介紹begin()與end()

1.概念:begin()、end()代表容器的特殊位置,分別為元素的第一個(gè)位置與最后一個(gè)元素的下一個(gè)位置

下面比如是vector的一個(gè)模型,則begin()、end()分別代表一下位置

C++迭代器怎么用

2.為什么要這樣設(shè)計(jì)?

  • begin():我們?cè)诒闅v容器的元素的時(shí)候,一般要獲取該元素的首元素,因此設(shè)計(jì)bengin()

  • end():當(dāng)我們用迭代器遍歷容器的時(shí)候,一般需要結(jié)束條件(如遍歷到最后一個(gè)元素),但是遍歷到最后一個(gè)元素時(shí)又不能舍棄它,因此將最后一個(gè)元素的下一位置作為結(jié)束標(biāo)志

六、rbegin()、rend()、crbegin()、crend()

這四者的原理與begin()、end()、cbegin()、cend()是相同的,也都是容器的成員函數(shù)

但是rbegin()、rend()分別代表最后一個(gè)元素與第一個(gè)元素的前一個(gè)位置

C++迭代器怎么用

七、迭代器的運(yùn)算

說(shuō)明:迭代器的運(yùn)算符一般都是對(duì)迭代器所指元素的位置進(jìn)行比較,返回的是比較結(jié)果或者改變迭代器的位置

迭代器沒(méi)有+運(yùn)算

例如有迭代器iter,iter1,iter2

*iter 返回迭代器所指元素的引用
iter->data 代表當(dāng)前所指位置處元素的的指針,可以訪問(wèn)其函數(shù)或成員,等價(jià)于(*iter).data
++iter 令迭代器指向容器的下一個(gè)元素
--iter 令迭代器指向容器的前一個(gè)元素
iter1==iter2 判斷兩個(gè)迭代器的位置是否相同
iter1!=iter2 同上
>、>=、<、<= 同上

iter + n 改變迭代器的位置
iter - n 同上
iter +=n 同上
iter -=n 同上
iter1 - iter2 兩個(gè)迭代器相減,返回它們之間的距離

實(shí)例:遍歷vector中的元素,如果遇到空白,停止遍歷

vector<string> v = {"Hello","fwe",""};
vector<string>::iterator iter;
for (iter = v.begin(); iter != v.end() && !iter->empty(); ++iter)
{
  cout << *iter<<"\t";
}

八、一些代碼事例

將string中的第一個(gè)字符改為大寫

string s = "helloWorld";
string::iterator it;
if (s.begin() != s.end())//先判斷s不為空
{
  it = s.begin();
  *it = toupper(*it);
}

使用容器元素的函數(shù)

(*item).empty(); //判斷是否為空
(*item).size(); //得到大小

得到中間元素的迭代器

auto mid=v.begin()+vi.size()/2;

折半查找string中的一個(gè)元素

string s = "abcdefghj";
char foundChar = 'e';
string::const_iterator l_iter=s.begin();
string::const_iterator r_iter=s.end();
string::const_iterator mid_iter = s.begin() + (r_iter - l_iter) / 2;
while (mid_iter != r_iter && *mid_iter != foundChar)
{
  if (*mid_iter > foundChar)
  {
    r_iter = mid_iter;
  }
  else
  {
    l_iter = mid_iter + 1;
  }
  mid_iter = l_iter + (r_iter - l_iter) / 2;
}
cout << *mid_iter << endl;

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++迭代器怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:C++迭代器怎么用-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://aaarwkj.com/article4/dedsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、定制網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)、軟件開發(fā)、定制開發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
中文字幕久精品视频免费| 国内精品久久大型新型| 精品一区无遮挡免费网站| 亚洲欧美另类国产一区| 亚洲精品国产精品乱码| 欧美黑人在线一区二区| 色综合久久婷婷色综合网| 国产一区二区三区精品久久| 中文在线中文天堂黄色片| 欧美亚洲另类不卡在线| 国产精品一级二区三区| 在线国产精品中文字幕| 亚洲精品一区av在线观看| 日本高清免费黄色录像| 亚洲欧美激情国产综合久久| 一区二区三区乱码国产在线| 成人短篇在线视频夫妻刺激自拍| 草嫩av一区二区三区| 久久se精品一区精品二区国产| 亚洲一区二区精品自拍| 亚洲成人精品一区二区| 色国产精品一区在线观看| 国产乱子一区二区三区| 久久综合给合综合久久| 日本一区二区三区高清不卡| 国产一区二区av免费| 久久精品中文字幕人妻| 婷婷色精品一区二区激情| 最新中文字幕成人在线观看| 亚洲欧洲精品真人av蜜臀| 精品女同一区二区三区网站| av毛片高清在线观看| 精品中文人妻中文字幕| av在线免费观看不卡| 亚洲日本日本午夜精品| 婷婷激情五月国产丝袜| 亚洲第一狼人天堂在线| 亚洲国产中文一区二区久久| 精品视频偷拍一区二区三区| 亚洲激情视频在线视频| 久久精品资源综合网|