Stl各容器对比
来源:互联网 发布:免费顶级域名注册 编辑:程序博客网 时间:2024/06/06 01:17
1. vector
变长一维数组,连续存放的内存块,有保留内存,堆中分配内存;
支持[]操作,高效率的随机访问;
在最后增加元素时,一般不需要分配内存空间,速度快;在中间或开始操作元素时要进行内存拷贝效率低;
vector高效的原因在于配置了比其所容纳的元素更多的内存,内存重新配置会花很多时间;
注:需要高效的随即存取,而不在乎插入和删除使用vector。
2. list
双向链表,内存空间上可能是不连续的,无保留内存,堆中分配内存;
不支持随机存取,开始和结尾元素的访问时间快,其它元素都O(n);
在任何位置安插和删除元素速度都比较快,安插和删除操作不会使其他元素的各个pointer,reference,iterator失效;
注:大量的插入和删除,而不关系随即存取使用list。
3. deque
双端队列,在堆上分配内存,一个堆保存几个元素,而堆之间使用指针连接;
支持[]操作,在首端和末端插入和删除元素比较快,在中部插入和删除则比较慢,像是list和vector的结合;
注:关心插入和删除并关心随即存取折中使用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
参考:http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832675.html
- Stl各容器对比
- 【STL】各容器成员对比表
- STL各容器成员对比表
- STL 各容器成员对比表
- 【STL】各容器成员对比表
- STL各容器成员对比表
- 【STL】各容器成员对比表
- STL中的容器对比
- STL常用容器对比
- STL常见容器set 、vector、 map 对比
- C++ STL容器部分对比分析
- 从STL容器的使用对比,研究hashmap…
- STL中各容器比较
- STL 各容器的相关性
- STL各容器适用情况
- STL各容器用法总结
- 几个库DGL、STL(vc6)、STL(SGI)、DCL 、DeCal 、EZDSL的容器性能对比测试
- STL 容器
- 怎么登陆Oracle
- POJ 1840 Eqs (hash)
- 非常强大的射击动作游戏源码完整版
- .NET用NCO连接SAP 从RFC查询数据 代码配置连接SAP的信息
- gdb 使用笔记
- Stl各容器对比
- BP Neural Networks初步理解
- spring+springMVC,声明式事务失效,原因以及解决办法
- Ioc-Unity整理
- [LeetCode OJ]ZigZag Conversion && Valid Sudoku && String to Integer (atoi)
- [BZOJ 1043][HAOI 2008]下落的圆盘(计算几何)
- ubuntu下ftp常识用法
- 示例解读Java的跨平台原理
- Apache_Maven基本配置和使用