STL中的容器

2022-07-16 10:57:13 字數 2362 閱讀 8649

一、什麼是stl

stl是standart template library,標準模板庫

是hp實驗室開發的一系列軟體的統稱,從根本上說,它是一些容器和演算法的集合,它是世界上很多最聰明的程式設計師多年的傑作

stl是標準化的元件,不用重新開發,可以直接使用,它是c++的一部分,不需要額外安裝

二、stl中有什麼

1、容器

儲存類物件的盒子

線性容器:vector、list

容器介面卡:queue、stack、double queue

關係型容器:set、map

2、演算法

#include

find sort

3、迭代器

迭代器是乙個類,它實現於容器模板中

它的物件是乙個指向容器中的乙個元素,它實現了*運算子,給人的感覺它好像是個指標

從容器中獲取到迭代器是乙個半開半閉區間,[start,end)

三、vector容器

1、特點:

a、占用的是連續的記憶體

b、動態的管理記憶體

c、支援隨機訪問(at,)

d、支援按迭代器進行插入和刪除(insert,erase)

但只有在末尾新增和刪除時效率才最高

e、支援隨機迭代:it=it+4;

2、定義:

vector《型別》 a;//建立容器

vector《型別》 a(10);//建立容器並設定容量為10,並把元素初始化為0

vector《型別》 a(10,1);//建立容器並設定容量為10,並設定初始值

3、返回值

v[i]、v.at(i) v.front()、v.back() 這種方式返回的是元素的引用

4、成員函式

assign

size_type capacity();//獲取容器在擴充之後的容量

iterator erase()

//元素被刪除或插入後,之前獲取的迭代器就失效了,需要重新獲取

void resize()

//改變容器的大小,可以調大(構造),也可以調小(析構)

5、支援的運算子

==、!=、>=、<=、>、<

比較兩個容器中元素的數量,順序,值是否相等

容器中存放的物件的運算子==運算子必須要過載

6、排序、查詢

在vector容器中是沒有排序和查詢的成員函式的

在list容器中由於這是鏈式的儲存結構所以不能使用全域性的sort函式,必須自己實現

在使用sort排序時,待排序的物件必須實現出《的過載(或者給sort提供比較函式)

7、自定義類使用容器時需要實現的成員有

無參構造、拷貝構造

== <

四、set容器

集合容器,裡面的元素不會重複,它會自動排重。

使用時要實現它的==運算子。

multiset 允許有重複的資料。

pair equal_range( const key_type &key );

查詢值等於key的元素資訊,返回兩人個迭代器。

iterator lower_bound( const key_type &key );

查詢大於等於key的第乙個元素

iterator upper_bound( const key_type &key );

查詢大於key的第乙個元素

五、佇列

單向佇列:

back、empty、front、pop、push、size

雙向佇列:

六、list

是一種鏈式儲存結構,不能使用演算法庫中的排序,只能呼叫自帶的排序函式。

void unique();

void unique( binpred pr );

刪除重複的元素。

void splice( iterator pos, list &lst );

void splice( iterator pos, list &lst, iterator del );

void splice( iterator pos, list &lst, iterator start, iterator end );

從指定的位置開始合併兩個鍊錶

void merge( list &lst );

void merge( list &lst, comp compfunction );

直接合併兩人個鍊錶

七、map是一種關聯式的容器

它底層以採用的是紅黑樹(有序+平衡)進行儲存的。

乙個鍵值(主鍵)只能對應乙個值。

multimap 多重對映

鍵值可以重複

八、priority_queue優先佇列

元素在入隊後就已經排序好了,最大值在上面。

對元素排序依靠的是 < 運算子。

C C 中STL的容器

一 六種序列容器 1 vector 向量 類似乙個陣列。區別在於 動態儲存 記憶體耗用更大,因為stl內部實現時,首先分配乙個非常大的記憶體空間預備進行儲存,即capacituy 函式返回的大小,當超過此分配的空間時再整體重新放分配一塊記憶體儲存,這給人以vector可以不指定vector即乙個連續...

STL中的容器對比

容器內部各個元素的位置取決插入的方式,與元素本身無關 vector 動態陣列,連續儲存 使用於尾部刪除插入,不適用與中間刪除插入,訪問效率高 deque 雙端佇列,分片連續儲存 使用於頭尾插入刪除,中間插入刪除效率低,支援下標操作 list 雙向鍊錶 適用於在序列頻繁插入 刪除 不需要移動資料 且不...

STL 中各容器的比較

list支援快速的插入和刪除,但是查詢費時 vector支援快速的查詢,但是插入費時。map查詢的時間複雜度是對數的,這幾乎是最快的,hash也是對數的。如果我自己寫,我也會用二叉檢索樹,它在大部分情況下可以保證對數複雜度,最壞情況是常數複雜度,而std map在任何情況下都可以保證對數複雜度,原因...