Stl(標準模板庫)

2021-07-30 01:56:16 字數 1395 閱讀 3960

stl(標準模板庫)

stl的目的是標準化元件,這樣就不用重新開發,可以使用現成的元件。我們常用到的stl容器有vector、list、deque、map、multimap、set和multiset。

1.簡單概括:

1、如果需要高效的隨機訪問,不在乎插入和刪除的效率,使用vector(類似陣列);

2、如果需要大量的插入和刪除元素,不關心隨機訪問的效率,使用list(類似指標);

3、如果需要隨機訪問,並且關心兩端資料的插入和刪除效率,使用deque(佇列);

4、如果打算儲存資料字典,並且要求方便地根據key找到value,一對一的情況使用map,一對多的情況使用multimap(1:1關聯容器);

5、如果打算查詢乙個元素是否存在於某集合中,唯一存在的情況使用set,不唯一存在的情況使用multiset(1:n)。

2.具體區別:

verctor

vector類似於c語言中的陣列,它維護一段連續的記憶體空間,具有固定的起始位址,因而能非常方便地進行隨機訪問,即 操作符,但因為它的記憶體區域是連續的,所以在它中間插入或刪除某個元素,需要複製並移動現有的元素。此外,當被插入的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體拷貝。值得注意的是,vector每次擴容為原來的兩倍,對小物件來說執行效率高,但如果遇到大物件,執行效率就低了。

list

list類似於c語言中的雙向鍊錶,它通過指標來進行資料的訪問,因此維護的記憶體空間可以不連續,這也非常有利於資料的隨機訪問,因而它沒有提供 操作符過載。

deque

deque類似於c語言中的雙向佇列,即兩端都可以插入或者刪除的佇列。queue支援 操作符,也就是支援隨機訪問,而且跟vector的效率相差無幾。它支援兩端的操作:push_back,push_front,pop_back,pop_front等,並且在兩端操作上與list的效率

也差不多。或者我們可以這麼認為,deque是vector跟list的折中。

map

map類似於資料庫中的1:1關係,它是一種關聯容器,提供一對一(c++ primer中文版中將第乙個譯為鍵,每個鍵只能在map中出現一次,第二個被譯為該鍵對應的值)的資料處理能力,這種特性了使得map類似於資料結構裡的紅黑二叉樹。

multimap

multimap類似於資料庫中的1:n關係,它是一種關聯容器,提供一對多的資料處理能力。

set

set類似於數學裡面的集合(如陣列a=,陣列b=, 它們的集合是),不過set的集合中不包含重複的元素,這是和vector的第乙個區別,第二個區別是set內部用平衡二叉樹實現,便於元素查詢,而vector是使用連續記憶體儲存,便於隨機訪問。

multiset

multiset類似於數學裡面的集合如陣列a=,陣列b=, 它們的集合是),集合中可以包含重複的元素。

STL 標準模板庫)

此篇只是乙個目錄,將分成單篇去完成 stl 主要有三個部分組成 容器,迭代器,演算法。順序容器 向量 vector 雙端佇列 dequeue 表 list ps copy 方法 關聯容器 集合 set 多重集合 multiset 對映 map 多重對映 multimap 容器介面卡 棧 stack ...

STL標準模板庫

stl標準模板庫 一。概述 c 內建的標準模板庫stl可以分為以下6大類 1.容器 2.迭代器 3.空間分配器 4.介面卡 5.演算法 6.仿函式 1.容器 概念 用來管理一組元素 分類 序列式容器 sequence containers 每個元素都有固定位置 取決於插入時機和地點,和元素值無關。v...

STL標準模板庫

函式模板的定義與使用 函式家族 語法形式 型別引數 typename 例項化 二次編譯 包含模型。函式模板包含兩種引數,一種是模板引數,即在模板名之前,用一對尖括號括起來的引數 另一種是呼叫引數,在模板名之前,用一對圓括號括起來的引數 如果函式模板呼叫引數的型別相關於該模板時,即使不顯式指定模板引數...