初識迭代器 C++ Iterator,初識iterator

來源:互聯網
上載者:User

初識迭代器 C++ Iterator,初識iterator
一:初識迭代器(Iterator類) 簡寫為 iter

(1)由來,我們知道string類 vector類的對象,可以通過下標運算來訪問元素;還有另外一種更通用的機制 -- 迭代器。不管你是用到 vector 還是list 或 map類你總離不開迭代器的。

(2)所有標準庫容器都可以使用迭代器,但是其中只有幾種容器才同時支援下標運算子。(string不屬於容器類型,但是基本操作與容器類似)

(3)類似於指標類型,迭代器也提供了對對象的間接訪問:iter可以訪問某個元素,從一個元素移動到另一個元素。(iter對象是容器中的元素或者string對象中的字元)

(4)iter有有效和無效之分,這一點和指標差不多,有效iter或指向某個元素或指向尾元素的下一位置,其它的都是無效位置。

(5)與指標不同的,iter不是使用取地址符(&),而是有返回迭代器類型的成員,如begin()(指向第一個元素的位置),end()(指向尾元素的下一個位置)

二:迭代器給我們帶來了什麼

(1)迭代器支援的運算子

 (*iter) :所指向元素的引用

 iter->mem :解引用iter,並擷取該元素的名為mem的成員,等價於(*iter).mem
 ++iter :指向下一個元素
 --iter :指向上一個元素
 iter1 == iter2 : 兩個迭代器是否指向同一個元素
 iter1 != iter2

 (2)編程風格:再迴圈條件結束的條件,c++程式員習慣性地使用 != 而非 < ;這是因為iter迭代器都定義了 == 和 != ,而它們中的大多數都沒有定義 < 運算子。

 (3) 只有string 和 vector 等一些標準庫類型 有下標運算子;

 vector<int>::iterator it;// 讀寫,普通迭代器
 vector<int>::const_iterator it; 僅讀 --> 類似於常量指標,常量迭代器

(4)c+11 引入了 cbegin() 和 cend(),返回常指標iter(類似於指標)

(*iter).empty(),括弧不能少的 或者it->mem (這等同於(*iter).mem );(*iter) 解引用迭代器可獲得迭代器所指向的對象;如果該對象恰好是類,就有可能希望進一步訪問它的成員。

(5)謹記一句話,但凡使用了迭代器的迴圈體,都不要向迭代器所屬的容器添加元素。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.