The C++ Standard Library备忘录:第五章

2013-12-29 10:40:54 

5、Standard Template Library

5.1 STL組件(STL Components)

  • 容器Containers,用來管理某類物件的集合。

  • 迭代器Iterators,用來在一個物件群集(collection of objects)的元素上進行巡訪動作。

   這個物件群集或許是個容器,或許是容器的一部分。

  • 演算法Algorithms,用來處理群集內的元素。它們可以出於不同的目的而搜尋、排序、修改、使用那些元素。

5.2 容器(Containers)

總的來說,容器可分為兩類:

  • 序列式容器Sequence containers,此乃可序(ordered)群集。   

STL提供三個定義好的序列式容器:vector, deque, list。

  • 關聯式容器Associative containers,此乃已序(sorted)群集。

STL提供了四個關聯式容器:set, multiset, map,multimap。

自動排序帶來的主要優點是,當你搜尋元素時,可獲得更佳效率。

5.2.1 序列式容器(Sequence Containers)

STL內部預先定義好以下三個序列式容器:

  • Vectorsz  

  • Dequesz  

  • Lists

此外你也可以將strings和array當作一种種序列式容器。

Vectors

Vector將其元素置於一個dynamic array中加以管理。

它允許隨機存取,也就是說你可以利用索引直接存取任何個元素。

vector 並未提供push_front(),因為其時間效能很差(在vector頭端安插一個元素,需要移動全部元素)。

Deques(double-ended queue)

它是一個dynamic array,可以向兩端發展,因此不論在尾部或頭部安插元素都十分迅速。

Lists

List由雙向串列(doubly linked list)實作而成。這意味list內的每個元素都以一部分記憶體指示其前導元素和後繼元素。

List不提供隨機存取,因此如果你要存取第10個元素,你必須沿著串鏈依次走過前9個元素。

不過,移動至下一個元素或前一個元素的行為,可以在常數時間內完成。

List的優勢是:在任何位置上執行安插或刪除動作都非常迅速,因為只需改變連結(links)就好。

這表示在list中間位置移動元素比在vector和deque快得多。

5.2.2 關聯式容器(Associative Containers)

關聯式容器依據特定的排序準則,自動為其元素排序。排序準則以函式形式呈現,用來比較元素值(value)或元素鍵(key)。

  • Sets

Set的內部元素依據其值自動排序,每個元素值只能出現一次,不允許重複。

  • Multisets

Multiset和set相同,只不過它允許重複元素,也就是說multiset可包括多個數值相同的元素。

  • Maps

Map的元素都是「實值/鍵值」所形成的一個對組(key/valuepairs)。每個元素有一个個鍵,是排序準則的基礎。

每一個鍵只能出現一次,不允許重複。Map可被視為關聯式陣列(associative array),也就是具有任意索引型別(index type)的陣列(詳見p91)。

  • Multimaps

Multimap和map相同,但允許重複元素,也就是說multimap可包含多個鍵值(key)相同的元素。Multimap可被當作「字典」(譯註:dictionary,某種資料結構)使用。

p209有個範例。

5.2.3 容器配接器(Container Adapters)​


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值