1. 程式人生 > >STL學習總結【菜鳥版】

STL學習總結【菜鳥版】

STL是標準模板庫(Standard Template Library)的簡稱,它是一些常用資料結構和演算法模板的集合。主要由Alex Stepanov開發,於1998年被新增到C++標準。
有了STL,你不必再從頭寫太多的資料結構和演算法,可以通過呼叫STL中的現成的資料結構和演算法,並且效能較高。

STL中的幾個概念:
1、容器:可容納各種資料型別的資料結構
2、迭代器:可依次存取容器中元素的東西。
3、演算法:用來操作容器中的元素的函式模板。例如:STL用sort()來對一個vertor的資料進行排序,用find()來搜尋一個list中的物件。
注:函式本身與他們操作的資料結構與型別無關,因此它們可以在從簡單陣列到高度複雜容器的任何資料結構上使用。

比如,陣列int array[100]就是個容器,而int *型別的指標變數就可以作為迭代器,可以為這個容器編寫一個排序演算法。

一、容器概述
容器可以用於存放各種型別的資料(基本型別的變數、物件等)的資料結構。
容器分為三大類:
1)順序容器
vector:後部插入/刪除,直接訪問
deque:前/後部插入/刪除,直接訪問
list:雙向連結串列,任意位置插入/刪除
2)關聯容器
set:快速查詢,無重複元素。預設按升序排序
multiset:快速查詢,可有重複元素。其它性質和set類似
hash_set:與set相比較,它裡面的元素不一定是經過排序的,而是按照所用的hash函式分派的,它能提供更快的搜尋速度,速度更快
hash_multiset:鍵值可以不唯一。其他特點和hash_set相同
map:一對一對映。無重複對映,基於關鍵字查詢
multimap:一對一對映。可有重複元素,基於關鍵字查詢
hash_map:與map相比較,它裡面的元素不一定是按鍵值排序的,而是按照所用的hash函式分派的,它能提供更快的搜尋速度,其他和map性質相同
hash_multimap:鍵值可以不唯一,其他特點與hash_map相同

前2者稱為第一類容器

3)容器介面卡
stack:LIFO,後進先出
queue:FIFO,先進先出
priority_queue:優先順序高的元素先出

順序容器介紹:
1)vector標頭檔案 #include
實際上就是個 動態陣列。隨機存取任何元素都能在常數時間完成,在尾端增衫元素具有較佳的效能。
2)deque標頭檔案 #include
也是個動態陣列,隨機存取任何元素都能在常數時間完成,效能次於vector,在兩端增刪元素具有較佳的效能。
3)list標頭檔案 #include
雙向連結串列,在任何位置增刪元素都能在常數時間內完成。不支援隨機存取。
上述三種容器稱為順序容器,是因為元素的插入位置同元素的值無關。