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

2021-07-22 01:28:57 字數 1960 閱讀 9021

3、本博文僅作學術交流只用,無任何其他用途。

言歸正傳,下面開始介紹c++中的stl容器。

standard template library,標準模板庫。

所謂stl容器,就是將最常用的一些資料結構實現出來。常用的資料結構不外乎陣列array、鍊錶list、樹tree、堆疊stack、佇列queue、雜湊表hash table、集合set、對映表map等,根據「資料在容器中的排列」特性,這些資料結構可分為序列式和關聯式兩種。因此,容器大概也分為序列式容器和關聯式容器兩種。

我們在使用容器的時候,迭代器是乙個不可分割的部分。迭代器在stl中用來將演算法和容器聯絡起來,起著一種膠著劑的作用。迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器是一種行為類似指標的物件,它提供類似指標的功能,對容器的內容進行走訪,而指標的各種行為中最常見也最重要的便是「內容提領」和「成員訪問」。因此,迭代器最重要的程式設計工作就是對operator*和operator->進行過載工作。

幾乎stl提供的所有演算法都是通過迭代器訪問元素序列進行工作的,每乙個容器都定義了其本身所專有的迭代器型別,用以訪問容器中的元素,如vector:

vector

::iterator iter; // 將iter宣告為int型別的向量迭代器

這條語句定義了乙個名為iter的變數,它的資料型別是由vector定義的iterator型別。每個標準庫容器型別都定義了乙個名為iterator的成員,這裡的iterator與迭代器的實際型別相同。術語迭代器通常指的是概念上的迭代器,而術語迭代器型別則是有容器定義的具體的iterator的型別,如vector。

常見的迭代器型別主要有:迭代器型別iterator、元素的唯讀迭代器型別const_iterator、按逆序定址元素的迭代器reverse_iterator、元素的唯讀逆序迭代器const_reverse_iterator。

vector

::iterator iter = vec.begin();

begin返回的迭代器指向容器內第乙個元素,end返回的迭代器指向容器內「最後乙個元素的下乙個位置」,end操作返回的迭代器並不指向vector中任何實際的元素,它只是起到乙個哨兵的作用,表示我們已經處理完vector中的所有元素。

rbegin返回乙個逆序迭代器,它指向容器的最後乙個元素,rend返回乙個逆序的迭代器,它指向容器的第乙個元素前面的位置。

迭代器型別可使用解引用操作符(*操作符)來訪問迭代器所指向的元素,解引用操作符返回迭代器當前所指向的元素。但是,不能對end操作返回的迭代器進行解引用。迭代器也可以使用自增操作符向前移動迭代器指向容器中下乙個元素,這在形式上與int型物件的自增操作類似。

關係操作符只適用於vector和deque容器,這是因為只有這兩種容器為其元素提供快速、隨機的訪問。它們確保可根據元素位置直接有效地訪問指定的容器元素。這兩種容器都支援通過元素的位置實現隨機訪問,因此它們的迭代器可以有效地實現算術和關係運算。

c++語言使用一對迭代器來標記迭代器的範圍。迭代器範圍:[first, last)是乙個左閉合區間,表示範圍從first開始,到last結束,但不包括last,即last指向容器內最後乙個元素的下乙個元素。注意:如果first不等於last,則對first反覆做自增運算必須能夠到達last;否則,即last位於first之前,則將發生未定義行為。迭代器範圍使用左閉合的意義:因為這樣可以統一表示空集,就無需特別處理。當first和last相等時,迭代器的範圍是空。

只有順序容器和關聯容器支援迭代器遍歷,各容器支援的迭代器的類別如下:

C STL常用容器(一)

使用時需要包含標頭檔案 include 1.初始化vector vec 16 定義了已知長度16的vector vector vec 64,2 定義了初值為2長度64的vector vector vec a 用a向量來建立向量 vector vec a.begin i,a.begin j 定義了值為...

C STL常用容器 一

4 4 2019 4 50 15 pm 2 set 集合 3 string 開始時候引入 includeusing namespace std typename 可以是 int double char node vectorname vector陣列 其中 arrayname 0 arrayname...

C STL容器總結

三大類容器 1.序列式容器 vector deque list vector是一種動態陣列,在記憶體中具有連續的儲存空間,支援快速隨機訪問。由於具有連續的儲存空間,所以在插入和刪除操作方面,效率比較慢。vector有多個建構函式,預設的建構函式是構造乙個初始長度為0的記憶體空間,且分配的記憶體空間是...