C STL應用與實現 16 迭代器綜述

2021-07-09 04:51:56 字數 3219 閱讀 7184

本系列文章的目錄在這裡:目錄. 通過目錄裡可以對stl總體有個大概了解

本文介紹了stl中的迭代器的概念和五種類別的迭代器:output iterator,input iterator,forward iterator,bidirectional iterator,random-access iterator.

迭代器是為了表示容器中某個元素位置這個概念而產生的,有一般到特殊(「高階」)可以把它分成五類,如下表所示:

iterator分類能力由誰提供

output iterator 輸出迭代器

向前寫ostream, inserter

input input 輸入迭代器

向前讀, 每個元素只能讀一次

istream

forward iterator 前向迭代器

向前讀forward_list, unordered containers(無序容器)

bidirectional iterator雙向迭代器

可向前向後兩個方向讀取

list, set(multiset), map(multimap)

random-access iterator 隨機訪問迭代器

隨機讀取

array, vector, deque, string, c風格陣列

stl中的各種演算法,包括中的以及各種容器的成員函式,還有各種功能函式,比如迭代器輔助函式(advance, next, prev, distance, iter_swap)等,有很多都是以迭代器作為輸入引數的,這些函式中,形參型別越是「一般」,說明其使用範圍越大。這裡所說的「一般」指的就是上面5類迭代器中「低階」的迭代器,比如input iterator和output iterator就比forward iterator一般,forward iterator比bidirectional iterator一般,bidirectional iterator又比random-access iterator一般。

假設有兩個演算法,f和g,f接受input iterator型別的引數,而g接受random-access型別的引數,那麼f的作用範圍就比g大,因為所有的forward, bidirectional和random-access迭代器都可以作為f的引數,而g只能使用random-access引數。

支援的操作功能描述

*iter = value

把value寫入迭代器iter所指向位置的元素

++iter

向前移動乙個位置,返回新的位置

iter++

向前移動乙個位置,返回舊的位置

type(iter)

拷貝建構函式

乙個純粹的input iterator 型別的迭代器,只能挨個元素向前唯讀地訪問元素. 典型示例是讀取標準鍵盤輸入的迭代器,每個元素只能讀取一次,且只能向前, 只能讀取,不能修改。

支援的操作功能描述

*iter

讀取元素

iter->member

訪問iter出元素的成員

++iter

向前移動乙個位置,返回新元素位置

iter++

向前移動乙個位置, 不要求返回值。通常是返回舊元素位置

iter1 == iter2

判等iter1 != iter2

判不等type(iter)

拷貝建構函式

forward iterator 是一種特殊的input iterator, 它在input iterator的基礎上提供了額外的保證:

它保證兩個指向同乙個元素的迭代器pos1, pos2, pos1 == pos2 返回true,並且對pos1, pos2呼叫自增操作符之後,二者仍然指向相同元素。

支援的操作功能描述

*iter

讀取元素

iter->member

訪問iter出元素的成員

++iter

向前移動乙個位置,返回新元素位置

iter++

向前移動乙個位置, 不要求返回值。通常是返回舊元素位置

iter1 == iter2

判等iter1 != iter2

判不等type()

使用預設建構函式建立乙個iterator

type(iter)

拷貝建構函式

iter1 = iter2賦值

bidirectional iterator是提供了回頭訪問能力的forward iterator, 在forward iterator支援的操作基礎上,它提供了以下兩個「回頭」操作:

支援的操作功能描述

–iter

回頭走一步,返回新位置

iter–

回頭走一步,返回舊位置

random-access iterator是功能最強大的迭代器型別,在bidirectional iterator基礎上提供了隨機訪問的功能,因此支援迭代器運算,模擬指標運算。

支援的操作功能描述

iter[n]

取第n個位置的元素

iter += n

移動n個位置, 向前後取決於n的符號

iter -= n

移動n個位置, 向前後取決於n的符號

iter + n

返回移動n個位置後的迭代器

iter - n

返回移動n個位置後的迭代器

iter1 - iter2

返回iter1和iter2間的距離

iter1 < iter2

iter1比iter2考前?

iter1 <= iter2

iter1不比iter2靠後?

iter1 > iter2

iter1比iter2靠後?

iter1 >= iter2

iter1不比iter2靠前?

作者水平有限,對相關知識的理解和總結難免有錯誤,還望給予指正,非常感謝!

C STL常用容器總結之一 容器與迭代器

3 本博文僅作學術交流只用,無任何其他用途。言歸正傳,下面開始介紹c 中的stl容器。standard template library,標準模板庫。所謂stl容器,就是將最常用的一些資料結構實現出來。常用的資料結構不外乎陣列array 鍊錶list 樹tree 堆疊stack 佇列queue 雜湊...

C STL中迭代器與容器的聯合使用(初級版)

在c 中,迭代器與stl其它容器聯合使用時,可以提供一種遍歷的方法,區別於其它形式的遍歷,使用迭代器在書寫思路上較為容易。普通迭代器 這種迭代器支援iter iter 等操作,同樣支援iter 2但是需要注意越界 不建議使用 2等容易越界的操作 vector iterator iter nums.b...

iter a 2 迭代器與zip()應用

iter 是python中的迭代器,不太使用,下面展示兩種功能。1.用於簡單迭代 in 53 a out 53 1,2,3,4,5,6 in 54 b iter a in 55 list b out 55 1,2,3,4,5,6 in 57 type b out 57 list iterator2....