1. 程式人生 > 其它 >C++ STL快速入門

C++ STL快速入門

技術標籤:C++

首先要說明一下這個STL內容都是概述性的,不是詳細的內容,簡單來說就是一些大概的框架性的,可以應付一些面試情況。但是要深入學習的話,必須要找更加詳細的資料。

不羅嗦,進入正題。

STL是C++中的標準模板庫,本文不深究STL的發展以及版本,以囫圇吞棗的形式講一些STL組成部分。

STL容器是STL學習中要重點關注的,STL容器有兩大類,順序容器和關聯容器。

順序容器有可變長動態陣列vector、雙端佇列deque、雙向連結串列list,它們之所以被稱為順序容器,是因為元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置(尾部、頭部或中間某處)插入,元素就會位於什麼位置。

關聯容器有set、multiset、map、multimap,這些容器在插入元素時,容器會按一定的排序規則將元素放到適當的位置上,因此插入元素時不能指定位置。
其中還有三個容器,分別是棧stack、佇列queue、優先順序佇列priority_queue,這三個是容器介面卡。

vector容器是順序容器的一種,支援隨機訪問元素,通過陣列下標進行訪問,新增的時候只要在尾部新增就可以了,所以訪問和新增的時間複雜度都是O(1)。
但是中間插入元素和刪除元素的話,需要移動後面的元素,所以時間複雜度是和刪除的元素的位置以及容器的元素個數有關。

deque容器也是順序容器的一種,它幾乎和vector一樣,唯一不同的就是在deque中,隨機存取任何元素都能在常數時間內完成(但慢於vector)。它相比於vector的優點是,vector在頭部刪除或新增元素的速度很慢,在尾部新增元素的效能較好,而deque 在頭尾增刪元素都具有較好的效能(大多數情況下都能在常數時間內完成)。它有兩種 vector 沒有的成員函式:

void push_front (const T & val); //將 val 插入容器的頭部
void pop_front(); //刪除容器頭部的元素

list容器也是順序容器的一種,它是雙向連結串列,所以不支援隨機訪問(就是不能用陣列下標也不能用"<"這類比較大小的符號),因為元素有前置指標和後置指標,所以在定位到要增加刪除位置的地方,增刪可以在常量時間內完成。另外因為list不支援隨機訪問,所以沒有sort演算法,需要在函式中支援該用法

set容器是關聯容器的一種,是排序好的集合(元素已經進行了排序),不允許有相同元素。不能直接修改set容器中元素的值。因為元素被修改後,容器並不會自動重新調整順序,於是容器的有序性就會被破壞,再在其上進行查詢等操作就會得到錯誤的結果。因此,如果要修改set容器中某個元素的值,正確的做法是先刪除該元素,再插入新元素。

multiset容器和set類似,區別在於差別set中不允許有相同元素,而multiset允許有相同元素。

map容器是關聯容器的一種,每個元素都分為關鍵字和值兩部分,容器中的元素是按關鍵字排序的,不允許有多個元素的關鍵字相同。不能直接修改map容器中元素的值。因為元素被修改後,容器並不會自動重新調整順序,於是容器的有序性就會被破壞,再在其上進行查詢等操作就會得到錯誤的結果。

multimap容器和map類似,區別在於差別map中不允許有相同元素,而multimap允許有相同元素。

更多精彩內容,請關注同名公眾:一點月光(alittle-moon)