STL容器比较

972 篇文章 329 订阅
73 篇文章 32 订阅

       由于找不到最原始的地方, 所以只能给这里微笑:http://blog.csdn.net/dodolzg/article/details/6127949


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


  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值