欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++下迭代器總結(jié)

 更新時間:2021年12月22日 16:15:37   作者:CSSDCC  
大家好,本篇文章主要講的是c++下迭代器總結(jié),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

1. 迭代器介紹

本章并不研究不同類型的迭代器,只總結(jié)常見迭代器的使用和誤區(qū)。

定義:迭代器(iterator)有時又稱光標(cursor),是程序設(shè)計的軟件設(shè)計模式,可在容器對象(container,例如鏈表或數(shù)組)上遍歷的接口,設(shè)計人員無需關(guān)心容器對象的內(nèi)存分配的實現(xiàn)細節(jié)。

背景:指針可以用來遍歷存儲空間連續(xù)的數(shù)據(jù)結(jié)構(gòu),但是對于非連續(xù)存儲的數(shù)據(jù)結(jié)構(gòu),就需要一個行為類似于指針的類,來對非連續(xù)數(shù)據(jù)結(jié)構(gòu)進行遍歷。正如定義里標紅所說,迭代器可以遍歷非連續(xù)的數(shù)據(jù)結(jié)構(gòu)。

在C++中,我們更傾向于使用迭代器而不是使用下標操作,因為標準庫為每一種標準容器(如vector)定義了一種迭代器類型,而只有少數(shù)容器(如vector)支持下標操作訪問容器元素。

2. 初始化

每種容器都定義了自己的迭代器類型,可以使用auto自動聲明迭代器的類型,也可以顯示的將迭代器類型寫出來:

//只有順序容器(不包括array)的構(gòu)造函數(shù)才接受大小參數(shù)
vector<int> vec(num, val);
vector<int>::iterator it = vec.begin();
//auto it = vec.begin();

3. 常用操作

下面表格列出了迭代器的常用操作:

*iter 解引用,返回迭代器指向的元素的引用
iter->member 等效于(*iter).member
++iter, iter++ iter + 1,指向容器的下一個元素
–iter, iter– 同上
iter1 == iter2 比較兩個迭代器是否相等
iter1 != iter2

在C++定義的容器類型中,只有vector,string和queue容器提供迭代器算術(shù)運算和除!=和==之外的關(guān)系運算:

iter + n, iter - n 迭代器+或-一個常數(shù),必須指向容器內(nèi)或尾后元素(end())
iter1 += iter2 同上
iter1 -= iter2 同上
iter1 - iter2 獲得兩個迭代器之間的距離
>, >=, <, <= 元素靠后的迭代器大于靠前的迭代器

注意:

迭代器并不是所有都可以進行加減常數(shù)。 能進行算數(shù)運算的迭代器只有隨機訪問迭代器。要求容器元素存儲在連續(xù)空間內(nèi);即vector、string、deque的迭代器是有加減法的;但是list、forward_list、map、set的迭代器是沒有加減法的,它們僅支持++iter、–iter這些操作。 it++和++it的區(qū)別

在STL中的容器使用迭代器進行遍歷時,it++與++it的效果是相同的,遍歷的次數(shù)也是相同的,但是在STL中效率卻不同:

++it返回的是引用;it++返回的是臨時對象;–it同理。

原因:it++每次都要返回一個無用的臨時對象,所以每一次遍歷,你都進行了一次創(chuàng)建并銷毀對象的操作。(leetcode小本本記好了?。?/p>

總結(jié)

到此這篇關(guān)于c++下迭代器總結(jié)的文章就介紹到這了,更多相關(guān)c++ 迭代器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++輸出斐波那契數(shù)列的兩種實現(xiàn)方法

    C++輸出斐波那契數(shù)列的兩種實現(xiàn)方法

    以下是對C++中輸出斐波那契數(shù)列的兩種實現(xiàn)方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Opencv提取連通區(qū)域輪廓的方法

    Opencv提取連通區(qū)域輪廓的方法

    這篇文章主要為大家詳細介紹了Opencv提取連通區(qū)域輪廓的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 深入理解char *a與char a[]的區(qū)別

    深入理解char *a與char a[]的區(qū)別

    很多人可能或多或少知道char *a與char a[]的一些區(qū)別,但如果詳細的說出來卻不知如何說去,下面這篇文章就給大家詳細介紹了關(guān)于C語言中char *a與char a[]的區(qū)別,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。
    2016-12-12
  • 淺談C語言結(jié)構(gòu)體

    淺談C語言結(jié)構(gòu)體

    本文主要介紹C語言 結(jié)構(gòu)體的知識,學習C語言肯定需要學習結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學習,有需要的小伙伴可以參考下
    2021-10-10
  • 基于getline()函數(shù)的深入理解

    基于getline()函數(shù)的深入理解

    本篇文章是對getline()函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言編程之掃雷小游戲空白展開算法優(yōu)化

    C語言編程之掃雷小游戲空白展開算法優(yōu)化

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2021-09-09
  • 解析VC中創(chuàng)建DLL,導出全局變量,函數(shù)和類的深入分析

    解析VC中創(chuàng)建DLL,導出全局變量,函數(shù)和類的深入分析

    本篇文章是對VC中創(chuàng)建DLL,導出全局變量,函數(shù)和類進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 簡述C++的復雜性

    簡述C++的復雜性

    這篇文章主要介紹了簡述C++的復雜性,幫助大家更好的理解和認識c++編程語言,感興趣的朋友可以了解下
    2020-08-08
  • C++20中的結(jié)構(gòu)化綁定類型示例詳解

    C++20中的結(jié)構(gòu)化綁定類型示例詳解

    這篇文章主要為大家介紹了C++20中的結(jié)構(gòu)化綁定類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • C++詳解多線程中的線程同步與互斥量

    C++詳解多線程中的線程同步與互斥量

    線程間如何通信同步?一些伙伴好奇線程間的通信及同步方法,沒關(guān)系,下面小編就繼續(xù)給大家科普下線程間通信及同步的方法以及互斥量
    2022-05-05

最新評論