STL六大元件

2021-10-05 05:30:00 字數 2136 閱讀 5890

stl提供六大元件,彼此可以相互套用:

1、容器(container)

各種資料結構,包括vector、list、deque、set、map等等,是日常使用中比較常用的部分

容器特性

所在標頭檔案

向量 vector

可以用常數時間訪問和修改任意元素,在序列尾部進行插入和刪除時,具有常數時間複雜度,對任意項的插入和刪除就有的時間複雜度與到末尾的距離成正比,尤其對向量頭的新增和刪除的代價是驚人的高的

雙端佇列 deque

基本操作與向量相同,唯一的不同是,其在序列頭部插入和刪除操作也具有常量時間複雜度

表 list

對任意元素的訪問與對兩端的距離成正比,但對某個位置上插入和刪除乙個項的花費為常數時間。

佇列 queue

插入只可以在尾部進行,刪除、檢索和修改只允許從頭部進行。按照先進先出的原則。

堆疊 stack

堆疊是項的有限序列,並滿足序列中被刪除、檢索和修改的項只能是最近插入序列的項。即按照後進先出的原則

集合 set

由節點組成的紅黑樹,每個節點都包含著乙個元素,節點之間以某種作用於元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序,具有快速查詢的功能。但是它是以犧牲插入刪除操作的效率為代價的

多重集合 multiset

可以支援重複元素的set

對映 map

由對組成的集合,以某種作用於鍵對上的謂詞排列。具有快速查詢能力

多重集合 multimap

乙個鍵可以對應多個值的map

2、演算法(algorithm)

一些常用演算法的實現,包括sort、merge、search、copy、erase等等;還有一些數學上的常用演算法,包括一些加法乘法常用的函式;需要注意的一點是容器有一些自帶的演算法,在使用容器時,容器自帶的演算法優先順序是要高於algorithm的;

3、迭代器(iterator)

迭代器是一種泛型物件,可以視為一種指標,可以通過迭代器指向容器中的某個元素,就可以對其進行讀寫。

4、仿函式(function object)

行為類似函式,作為演算法的某種策略。仿函式是泛型程式設計強大威力和純粹抽象概念的又一例證。可以說,任何東西,只要其行為像函式,它就是乙個函式。因此如果定義了乙個物件,行為像函式,它就可以被當做函式來用。簡單理解就是:一種比較簡單的、主要用到operator()操作的、其他成員函式和成員變數都是為operator()服務的物件。

5、介面卡(adaptor)

介面卡是用來修改其他元件介面的stl元件,是帶有乙個引數的類模板(這個引數是操作的值的資料型別)。改變 functors介面者,稱為function adapter;改變 container 介面者,稱為container adapter;改變iterator介面者,稱為iterator adapter。

例如:stl提供的queue 和 stack,雖然看似容器,但其實只能算是一種容器配接器,因為它們的底部完全借助deque,所有操作都由底層的deque**。

迭代器介面卡:修改為某些基本容器定義的迭代器的介面的一種stl元件。反向迭代器和插入迭代器都屬於迭代器介面卡,迭代器介面卡擴充套件了迭代器的功能。

函式介面卡:通過轉換或者修改其他函式物件使其功能得到擴充套件。這一類介面卡有否定器(相當於"非"操作)、繫結器、函式指標介面卡。函式物件介面卡的作用就是使函式轉化為函式物件,或是將多引數的函式物件轉化為少引數的函式物件。

6、空間配置器(allocator)

空間配置器為容器分配並管理記憶體,統一的記憶體管理使得stl庫的可用性、可移植行、以及效率都有了很大的提公升。從實現的角度來看,配置器一種是實現了動態空間配置、空間管理、空間釋放的class template,而另一種設計到小塊記憶體的管理等,運用了記憶體池技術等。

這六大元件的互動關係:

container(容器) 通過 allocator(空間配置器) 取得\釋放資料儲存空間,algorithm(演算法)通過 iterator(迭代器)訪問 container(容器) 位址內容,functor(仿函式) 協助 algorithm(演算法) 完成不同的策略變化,adapter(配接器) 可以修飾或套接 functor(仿函式)。

《stl原始碼剖析》  侯捷著

《c++標準程式庫》  侯捷譯

STL六大元件

stl提供六大元件,彼此可以組合套用。1 容器 containers 各種資料結構。如vector,list,deque,set,map,用來存放資料。容器又可以分為順序容器和關聯容器.順序容器 vector,list,deque,stack,queue,heap,priority queue,sl...

STL 六大元件

1.容器 containers 各種資料結構,如vector,list,deque,set,map,用來存放資料。從實現的角度看,stl容器是一種class template。2.演算法 algorithms 各種常用的演算法如sort,search,copy,erase 從實現的角度看,stl演算...

STL六大元件

容器 containers 各種資料結構,如 vector list deque set map 用來存放資料。演算法 algorithms 各種常用演算法,如 sort search copy erase 分配器 allocators 負責空間配置與管理。迭代器 iterators 容器與演算法之...