STL容器比較

STL的容器可以分爲以下幾個大類:
一:序列容器, 有vector, list, deque, string.

二 : 關聯容器,     有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap

三: 其他的雜項: stack, queue, valarray, bitset

 

STL各個容器的實現:

 

(1) vector
內部數據結構:數組。
隨機訪問每個元素,所需要的時間爲常量。
在末尾增加或刪除元素所需時間與元素數目無關,在中間或開頭增加或刪除元素所需時間隨元素數目呈線性變化。
可動態增加或減少元素,內存管理自動完成,但程序員可以使用reserve()成員函數來管理內存。
vector的迭代器在內存重新分配時將失效(它所指向的元素在該操作的前後不再相同)。當把超過capacity()-size()個元素插入vector中時,內存會重新分配,所有的迭代器都將失效;否則,指向當前元素以後的任何元素的迭代器都將失效。當刪除元素時,指向被刪除元素以後的任何元素的迭代器都將失效。

(2)deque
內部數據結構:數組。
隨機訪問每個元素,所需要的時間爲常量。
在開頭和末尾增加元素所需時間與元素數目無關,在中間增加或刪除元素所需時間隨元素數目呈線性變化。
可動態增加或減少元素,內存管理自動完成,不提供用於內存管理的成員函數。
增加任何元素都將使deque的迭代器失效。在deque的中間刪除元素將使迭代器失效。在deque的頭或尾刪除元素時,只有指向該元素的迭代器失效。

(3)list
內部數據結構:雙向環狀鏈表。
不能隨機訪問一個元素。
可雙向遍歷。
在開頭、末尾和中間任何地方增加或刪除元素所需時間都爲常量。
可動態增加或減少元素,內存管理自動完成。
增加任何元素都不會使迭代器失效。刪除元素時,除了指向當前被刪除元素的迭代器外,其它迭代器都不會失效。

(4)slist
內部數據結構:單向鏈表。
不可雙向遍歷,只能從前到後地遍歷。
其它的特性同list相似。

(5)stack
適配器,它可以將任意類型的序列容器轉換爲一個堆棧,一般使用deque作爲支持的序列容器。
元素只能後進先出(LIFO)。
不能遍歷整個stack。

(6)queue
適配器,它可以將任意類型的序列容器轉換爲一個隊列,一般使用deque作爲支持的序列容器。
元素只能先進先出(FIFO)。
不能遍歷整個queue。

(7)priority_queue
適配器,它可以將任意類型的序列容器轉換爲一個優先級隊列,一般使用vector作爲底層存儲方式。
只能訪問第一個元素,不能遍歷整個priority_queue。
第一個元素始終是優先級最高的一個元素。

(8)set
鍵和值相等。
鍵唯一。
元素默認按升序排列。
如果迭代器所指向的元素被刪除,則該迭代器失效。其它任何增加、刪除元素的操作都不會使迭代器失效。

(9)multiset
鍵可以不唯一。
其它特點與set相同。

(10)hash_set
與set相比較,它裏面的元素不一定是經過排序的,而是按照所用的hash函數分派的,它能提供更快的搜索速度(當然跟hash函數有關)。
其它特點與set相同。

(11)hash_multiset
鍵可以不唯一。
其它特點與hash_set相同。

(12)map
鍵唯一。
元素默認按鍵的升序排列。
如果迭代器所指向的元素被刪除,則該迭代器失效。其它任何增加、刪除元素的操作都不會使迭代器失效。

(13)multimap
鍵可以不唯一。
其它特點與map相同。

(14)hash_map
與map相比較,它裏面的元素不一定是按鍵值排序的,而是按照所用的hash函數分派的,它能提供更快的搜索速度(當然也跟hash函數有關)。
其它特點與map相同。

(15)hash_multimap
鍵可以不唯一。
其它特點與hash_map相同。

 

 

下面以表格列出表示:

 

Sequence containers

Associative containers

 

Headers

<vector>

<deque>

<list>

<set>

 

<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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章