C 11中容器迭代器操作總結

2021-08-11 15:19:53 字數 1460 閱讀 8668

我發現有必要對各類容器迭代器的操作做乙個小小的總結,本文中的內容大多來自於《c++ primer》(第5版)中相關章節的內容。

1.下面列出了容器迭代器支援的所有的操作(注意:forward_list迭代器不支援遞減運算子(--))。

*iter                      返回迭代器iter所指元素的引用

iter->mem             解引用iter並獲取該元素名為mem的成員,等價於(*iter).mem

++iter                   令iter指示容器中的下乙個元素

--iter                     令iter指示容器中的上乙個元素

iter1 == iter2        判斷兩個迭代器是否相等(不相等),如果兩個迭代器指示的是同乙個

iter1 != iter2         元素或者它們是同乙個容器的尾後迭代器,則相等;反之,不相等。

2.下面的運算只能用於string,vector,deque和array的迭代器。不能將它們用於其他任何容器型別的迭代器!!

iter + n                 迭代器加上乙個整數值仍得到乙個迭代器,迭代器指示的新位置與原來相比向前移動了若干元                                      素。結果迭代器或者指示容器內的乙個元素,或者指向容器尾的下乙個位置

iter - n/iter += n/iter -=n  這三操作意思和上面差不多。。

iter1 - iter2           兩個迭代器相減的結果是它們之間的距離,參與運算的兩個迭代器必須指向的是同乙個容器中                                      的元素或者尾元素後的位置

>、>=、<、<=    迭代器的關係運算子,如果某迭代器指向的容器位置在另乙個迭代器所指位置之前,則說明前                                      者小於後者。參與運算的兩個迭代器必須指向的是同乙個容器中的元素或者尾元素後的位置

3.對於不同容器型別的迭代器,簡單來說

順序容器:

string、vector、deque和array    支援++、--、+n、-n.

forwar_list                                   支援++,然鵝不支援+n、-n、--.

list                                               支援++、--,然鵝不支援+n、-n.

關聯容器:

set、map、multiset、multimap   支援

++、--,然鵝不支援+n、-n.

unordered_set、unordered_map、unordered_multiset、unordered_multimap   支援

++、--,然鵝不支援+n、-n.

注意:本文中的單獨出現的++、--符號均包含了前置後置兩種情況。

C 11迭代器失效問題分析

這個問題面試官最喜歡問了,咱們把它解決掉,非常簡單的。對於序列式容器 如vector,deque 序列式容器就是陣列式容器,刪除當前的iterator會使後面所有元素的iterator都失效。這是因為vetor,deque使用了連續分配的記憶體,刪除乙個元素導致後面所有的元素會向前移動乙個位置。所以...

C 11系列 區間迭代

2013 08 20 在我前面介紹c 11的文章中,我提到c 11將會帶來一些實用的改進。我的意思是它將移除一些不必要的打字和其它影響快速編碼的壁壘。我前面講過的auto關鍵字就是乙個例子 現在我想講一下區間迭代 range based for loop 近來,基本上所有現代程式語言都有一種對乙個區...

C 11 新增容器 array

array 容器是 c 11 標準中新增的序列容器,簡單地理解,它就是在 c 普通陣列的基礎上,新增了一些成員函式和全域性函式。array是將元素置於乙個固定陣列中加以管理的容器。array可以隨機訪問元素,支援索引值直接訪問,用操作符或at 方法對元素進行操作,也可以使用迭代器訪問 不支援動態的新...