c++STL六大組件

(一)、泛型程序設計
泛型編程(generic programming)
將程序寫得儘可能通用
將算法從數據結構中抽象出來,成爲通用的
C++的模板爲泛型程序設計奠定了關鍵的基礎

(二)、什麼是STL
1、STL(Standard Template Library),即標準模板庫,是一個高效的C++程序庫。

2、包含了諸多在計算機科學領域裏常用的基本數據結構和基本算法。爲廣大C++程序員們提供了一個可擴展的應用框架,高度體現了軟件的可複用性

3、從邏輯層次來看,在STL中體現了泛型化程序設計的思想(generic programming)
在這種思想裏,大部分基本算法被抽象,被泛化,獨立於與之對應的數據結構,用於以相同或相近的方式處理各種不同情形。

4、從實現層次看,整個STL是以一種類型參數化(type parameterized)的方式實現的

基於模板(template)

二、STL組件

Container(容器) 各種基本數據結構
Adapter(適配器) 可改變containers、Iterators或Function object接口的一種組件
Algorithm(算法) 各種基本算法如sort、search…等
Iterator(迭代器) 連接containers和algorithms
Function object(函數對象)
Allocator(分配器)
這裏寫圖片描述

(一)、容器
容器類是容納、包含一組元素或元素集合的對象
七種基本容器:

向量(vector)、雙端隊列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)
標準容器的成員絕大部分都具有共同的名稱

這裏寫圖片描述
序列式容器

序列式容器Sequence containers,其中每個元素均有固定位置——取決於插入時機和地點,和元素值無關。(vector、deque、list)
關聯式容器

關聯式容器Associative containers,元素位置取決於特定的排序準則以及元素值,和插入次序無關。(set、multiset、map、multimap)

1、需要頻繁在序列中間位置上進行插入和/或刪除操作且不需要過多地在序列內部進行長距離跳轉,應該選擇list
2、vector頭部與中間插入刪除效率較低,在尾部插入與刪除效率高。
3、deque是在頭部與尾部插入與刪除效率較高

set/map/
set,同map一樣,所有元素都會根據元素的鍵值自動被排序,因爲set/map兩者的所有各種操作,都只是轉而調用RB-tree的操作行爲,不過,值得注意的是,兩者都不允許兩個元素有相同的鍵值。
不同的是:set的元素不像map那樣可以同時擁有實值(value)和鍵值(key),set元素同時擁有實值和鍵值,且實值就是鍵值,鍵值就是實值,而map的所有元素都是pair,同時擁有實值(value)和鍵值(key),pair的第一個元素被視爲鍵值,第二個元素被視爲實值。

(二)、迭代器
1、迭代器Iterators,用來在一個對象羣集(collection of objects)的元素上進行遍歷。這個對象羣集或許是個容器,或許是容器的一部分。迭代器的主要好處是,爲所有容器提供了一組很小的公共接口。迭代器以++進行累進,以*進行提領,因而它類似於指針,我們可以把它視爲一種smart pointer
2、比如++操作可以遍歷至羣集內的下一個元素。至於如何做到,取決於容器內部的數據組織形式。
3、每種容器都提供了自己的迭代器,而這些迭代器能夠了解容器內部的數據結構。

(三)、算法
算法Algorithms,用來處理羣集內的元素。它們可以出於不同的目的而搜尋、排序、修改、使用那些元素。通過迭代器的協助,我們可以只需編寫一次算法,就可以將它應用於任意容器,這是因爲所有的容器迭代器都提供一致的接口。

(四)、適配器
1、適配器是一種接口類

爲已有的類提供新的接口
目的是簡化、約束、使之安全、隱藏或者改變被修改類提供的服務集合
2、三種類型的適配器:

容器適配器:用來擴展7種基本容器,它們和順序容器相結合構成棧、隊列和優先隊列容器
迭代器適配器(反向迭代器、插入迭代器、IO流迭代器)
函數適配器(函數對象適配器、成員函數適配器、普通函數適配器)

(五)、函數對象
1、函數對象(function object)也稱爲仿函數(functor)
2、一個行爲類似函數的對象,它可以沒有參數,也可以帶有若干參數。
3、任何重載了調用運算符operator()的類的對象都滿足函數對象的特徵
4、函數對象可以把它稱之爲smart function。
5、STL中也定義了一些標準的函數對象,如果以功能劃分,可以分爲算術運算、關係運算、邏輯運算三大類。爲了調用這些標準函數對象,需要包含頭文件。

(六)、分配器
負責空間配置與管理。從實現的角度來看,配置器是一個實現了動態空間配置、空間管理、空間釋放的class template。

隱藏在這些容器後的內存管理工作是通過STL提供的一個默認的allocator實現的。當然,用戶也可以定製自己的allocator,只要實現allocator模板所定義的接口方法即可,然後通過將自定義的allocator作爲模板參數傳遞給STL容器,創建一個使用自定義allocator的STL容器對象,如:
stl::vector

發佈了106 篇原創文章 · 獲贊 18 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章