STL容器型別

2022-10-01 12:30:14 字數 2605 閱讀 7048

1. stl有6種序列容器型別

(1)vector

它提供對元素的隨即訪問,在尾部新增和刪除元素的時間是固定的,在頭部或中部插入和刪除元素的複雜度為線性時間。

(2)deque

在檔案中宣告。

是雙端佇列,支援隨即訪問。從deque的開始與末尾位置插入和刪除元素的時間是固定的。

儘管vector和deque都提供對元素的隨機訪問和在序列中部執行線性時間的插入和刪除操作,但vector容器執行這些操作時速度更快一些。

(3)list

是雙向鍊錶,插入刪除元素時間固定。不支援隨機訪問。

與vector不同是,當向容器中插入或刪除元素後,鍊錶迭代器指向元素將不變。

解釋一下:如果乙個vector有5個元素,中間插入乙個,那麼第五個元素包含的值將是以前第四個元素的值,因此,迭代器指向的位置不變,但是資料不同。然而,在鍊錶中插入新元素並不會移動已有的元素,而只是修改鏈結資訊。指向某個元素的迭代器仍然指向該元素,也就是值相同,鏈結的位置不同了。

(4)queue

在標頭檔案中宣告。queue是乙個介面卡類,底層類預設為deque。

它不允許隨機訪問佇列元素,甚至不允許遍歷佇列。

可以將元素新增到隊尾,檢視隊尾和隊首的元素的值,檢查元素數目和測試佇列是否為空。

(5)priority_queue

與queue的不同是,最大的元素總是在隊首,也是乙個介面卡類,預設的底層類是vector。

可以修改用於確定哪個元素放在隊首的比較方式,方法是提供乙個可選的構造函式引數。

(6)stack

也是乙個介面卡類,預設的底層實現為vector。

不允許隨機訪問堆疊元素,甚至不允許遍歷堆疊。

可以壓入到棧頂,從棧頂彈出元素,檢視棧頂元素的值,檢查元素數目和測試堆疊是否為空。

2. stl有4種聯合容器:set,multiset, map, multimap;

聯合容器將值與關鍵字關聯在一起,使用關鍵字來查詢值。

關聯容器的長處在於,它提供了對元素的快速訪問。與序列相似,聯合容器也允許插

入新元素,不過不能指定元素的插入位置。原因是聯合容器通常包含用於確定資料存

放位置的演算法,以便能夠很快檢索資訊。

(1)set,multiset

前兩種是在set標頭檔案中(以前分別為set.h和multiset.h);

值的型別與關鍵字相同。set刪除相同的元素,multiset不會。

(2)map,multimap

後兩種是在map標頭檔案中(以前分別為map.h和multimap.h)。

值的型別與關鍵字不同。map關鍵字唯一,multimap關鍵字不唯一。

1.輸入迭代器

術語「輸入」是從程式的角度說的,即來自容器的資訊被視為輸入,就像是來自鍵盤的資訊對程式來說是輸入一樣。因此,輸入迭代器可被程式用來讀取容器中的資訊。

具體的說,對輸入迭代器接觸引用將使程式能讀讀取容器中的值,但不一定能讓程式修改值。因此,需要輸入迭代器的演算法將不會修改容器中的值。

輸入迭代器必須能夠訪問容器中所有的值,這是通過支援++操作符來實現的。

如果將輸入迭代器設定為指向容器的第乙個元素,並不斷的將其遞增,知道到達末尾位置,則它將一次指向容器中的每乙個元素。

另外,並不能保證輸入迭代器第二次遍歷容器時,順序不變。輸入迭代器並遞增以後,也不能保證其先前的值仍然可以被解除引用。

基於輸入迭代器的任何演算法都應當是單通行的,不依賴於前一次遍歷時的迭代器值,也不依賴於本次遍歷中前面的迭代器值。

2.輸出迭代器

輸出是指用於將資訊從程式傳輸給容器的迭代器,因此程式的輸出就是容器的輸入。

解除引用能讓程式修改容器的值,但是不能讀取。

傳送到顯示器上的輸出就是如此,cout可以修改傳送到顯示器的字元流,卻不能讀取

螢幕上的內容。

對於單通行,唯讀演算法,可以使用輸入迭代器;

對於單通行,只寫演算法,可以使用輸出迭代器。

3.正向迭代器

正向迭代器只使用++操作符來遍歷容器,所以它每次沿容器向前移動乙個元素;不過,與輸入和輸出迭代器不同的是,它總是按相同的循序遍歷一些列值。另外,將正向迭代器遞增後,仍然可以對前面的迭代器值解除引用,並可以得到相同的值。這些特徵使得多次通行演算法成為可能。

正向迭代器既可以似的能夠讀取和修改資料,也可以似的只能讀取資料。

4.雙向迭代器

它具有正向迭代器的所有特徵,同時支援--操作符。

5.隨機訪問迭代器

隨機訪問迭代器具有雙向迭代器的所有特性,同時新增了支援隨機訪問的操作和用於對元素進行排序的關係操作符。(就是可以比較指標的大小)

注意:各種迭代器的型別並不是確定的,而只是一種概念性的描述。不能用物件導向的語言來表達迭代器的種類,迭代器的種類只是一系列的要求,而不是一種型別(類)。在stl中,用概念一詞來描述這一系列要求。因此,有輸入迭代器概念和雙向迭代器概念,但是卻沒有輸入迭代器型別和雙向迭代器型別。

stl有乙個使用方便的預定義迭代器集合,其中包括正向迭代器、反向迭代器、插入器和流迭代器還不是十分理解上面這段話的意思,需要進一步了解預定義迭代器跟上面的5種迭代器的關係

STL 容器型別

1.stl有6種序列容器型別 1 vector 向量 相當於乙個陣列 在記憶體中分配一塊連續的記憶體空間進行儲存。支援不指定vector大小的儲存。stl內部實現時,首先分配乙個非常大的記憶體空間預備進行儲存,即capacituy 函式返回的大小,當超過此分配的空間時再整體重新放分配一塊記憶體儲存,...

STL 容器型別

1.stl有6種序列容器型別 1 vector 向量 相當於乙個陣列 在記憶體中分配一塊連續的記憶體空間進行儲存。支援不指定vector大小的儲存。stl內部實現時,首先分配乙個非常大的記憶體空間預備進行儲存,即capacituy 函式返回的大小,當超過此分配的空間時再整體重新放分配一塊記憶體儲存,...

C 容器(STL容器)

容器 container 用於存放資料的類模板。可變長陣列 鍊錶 平衡二叉樹等資料結構在stl中都被實現為容器。在使用容器時,即將容器類模型例項化為容器類,會指明容器中存放的元素是什麼型別。容器可以分為兩大類 順序容器和關聯容器 順序容器有可變長動態陣列vector 雙端佇列deque 雙向鍊錶li...