1. 程式人生 > >Stl各容器對比

Stl各容器對比

1. vector

    變長一維陣列,連續存放的記憶體塊,有保留記憶體,堆中分配記憶體;

    支援[]操作,高效率的隨機訪問;

    在最後增加元素時,一般不需要分配記憶體空間,速度快;在中間或開始操作元素時要進行記憶體拷貝效率低;

    vector高效的原因在於配置了比其所容納的元素更多的記憶體,記憶體重新配置會花很多時間;

注:需要高效的隨即存取,而不在乎插入和刪除使用vector

2. list

    雙向連結串列,記憶體空間上可能是不連續的,無保留記憶體,堆中分配記憶體;

    不支援隨機存取,開始和結尾元素的訪問時間快,其它元素都On);

    在任何位置安插和刪除元素速度都比較快,安插和刪除操作不會使其他元素的各個pointer

referenceiterator失效;

注:大量的插入和刪除,而不關係隨即存取使用list

3. deque

    雙端佇列,在堆上分配記憶體,一個堆儲存幾個元素,而堆之間使用指標連線;

    支援[]操作,在首端和末端插入和刪除元素比較快,在中部插入和刪除則比較慢,像是listvector的結合;

注:關心插入和刪除並關心隨即存取折中使用deque

4. set multiset

    有序集合,使用平衡二叉樹儲存,按照給定的排序規則(預設按less排序)對set中的資料進行排序;

    set中不允許有重複元素,multiset中執行有重複元素;

    兩者不支援直接存取元素的操作;

    因為是自動排序,查詢元素速度比較快;
    不能直接改變元素值,否則會打亂原本正確的順序,必須先下刪除舊元素,再插入新的元素。

5. map multimap

    字典庫,一個值對映成另一個值,使用平衡二叉樹儲存,按照給定的排序規則對map中的key值進行排序;

    map中的key值不允許重複,multimap中的key允許重複;

    根據已知的key值查詢元素比較快;

    插入和刪除操作比較慢。

 STL中各容器的對比表:

順序容器

關聯容器

大類

<vector>

<deque>

<list>

<set>

<map> 

<bitset>

Members

complex

vector

deque

list

set

multiset

map

multimap

bitset

constructor

*

constructor

constructor

constructor

constructor

constructor

constructor

constructor

constructor

destructor

O(n)

destructor

destructor

destructor

destructor

destructor

destructor

destructor

operator=

O(n)

operator=

operator=

operator=

operator=

operator=

operator=

operator=

operators

iterators

begin

O(1)

begin

begin

begin

begin

begin

begin

begin

end

O(1)

end

end

end

end

end

end

end

rbegin

O(1)

rbegin

rbegin

rbegin

rbegin

rbegin

rbegin

rbegin

rend

O(1)

rend

rend

rend

rend

rend

rend

rend

capacity

size

*

size

size

size

size

size

size

size

size

max_size

*

max_size

max_size

max_size

max_size

max_size

max_size

max_size

empty

O(1)

empty

empty

empty

empty

empty

empty

empty

resize

O(n)

resize

resize

resize

element access

front

O(1)

front

front

front

back

O(1)

back

back

back

operator[]

*

operator[]

operator[]

operator[]

operator[]

at

O(1)

at

at

modifiers

assign

O(n)

assign

assign

assign

insert

*

insert

insert

insert

insert

insert

insert

insert

erase

*

erase

erase

erase

erase

erase

erase

erase

swap

O(1)

swap

swap

swap

swap

swap

swap

swap

clear

O(n)

clear

clear

clear

clear

clear

clear

clear

push_front

O(1)

push_front

push_front

pop_front

O(1)

pop_front

pop_front

push_back

O(1)

push_back

push_back

push_back

pop_back

O(1)

pop_back

pop_back

pop_back

observers

key_comp

O(1)

key_comp

key_comp

key_comp

key_comp

value_comp

O(1)

value_comp

value_comp

value_comp

value_comp

operations

find

O(log n)

find

find

find

find

count

O(log n)

count

count

count

count

count

lower_bound

O(log n)

lower_bound

lower_bound

lower_bound

lower_bound

upper_bound

O(log n)

upper_bound

upper_bound

upper_bound

upper_bound

equal_range

O(log n)

equal_range

equal_range

equal_range

equal_range

unique members

capacity 
reserve

splice
remove
remove_if
unique
merge
sort 
reverse

set
reset
flip 
to_ulong
to_string 
test 
anynone