在C++的标准模板库(STL)中,不同的容器有各自独特的属性和用途。以下是一些常见STL容器的比较:
顺序容器:
-
vector
: 动态数组,提供快速随机访问。适合于元素数量经常变化的情况。 -
deque
: 双端队列,与vector类似,但在前端插入和删除操作更高效。 -
list
: 双向链表,支持快速插入和删除,但不支持随机访问。 -
forward_list
: 单向链表,与list类似,但仅支持单向顺序访问。 -
array
: 固定大小数组,支持快速随机访问,但大小在编译时固定。
关联容器:
-
set
: 基于红黑树的集合,元素唯一且自动排序。 -
multiset
: 类似set,但允许重复元素。 -
map
: 基于红黑树的键值对集合,每个键唯一。 -
multimap
: 类似map,但允许键有重复。
无序关联容器:
-
unordered_set
: 基于哈希表的集合,元素唯一,不自动排序。 -
unordered_multiset
: 类似unordered_set,但允许重复元素。 -
unordered_map
: 基于哈希表的键值对集合,每个键唯一。 -
unordered_multimap
: 类似unordered_map,但允许键有重复。
容器适配器:
-
stack
: 后进先出(LIFO)的容器适配器。 -
queue
: 先进先出(FIFO)的容器适配器。 -
priority_queue
: 元素按优先级出队的容器适配器。
每种容器都有其特定的使用场景。例如,如果需要频繁在序列中间插入和删除元素,list
或 forward_list
可能是最佳选择。如果需要快速访问任意元素,vector
或 array
可能更合适。对于需要键值对存储且有唯一键的数据,map
是一个好的选择,而当数据中键可以重复时,可以使用multimap
。无序关联容器通常在元素不需要排序且插入和查找操作非常频繁时使用。
下面是一些容器插入,删除,访问,大小操作方法概览:
vector(向量):
- 插入:
push_back
,insert
- 删除:
pop_back
,erase
- 访问:
operator[]
,at
,front
,back
- 大小:
size
,empty
,resize
deque(双端队列):
- 插入:
push_back
,push_front
,insert
- 删除:
pop_back
,pop_front
,erase
- 访问:
operator[]
,at
,front
,back
- 大小:
size
,empty
,resize
list(列表):
- 插入:
push_back
,push_front
,insert
- 删除:
pop_back
,pop_front
,erase
- 访问:
front
,back
- 大小:
size
,empty
map(映射):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
operator[]
,at
,find
- 大小:
size
,empty
set(集合):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
find
,count
- 大小:
size
,empty
queue(队列):
- 插入:
push
- 删除:
pop
- 访问:
front
,back
- 大小:
size
,empty
stack(栈):
- 插入:
push
- 删除:
pop
- 访问:
top
- 大小:
size
,empty
unordered_set(无序集合):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
find
,count
- 大小:
size
,empty
unordered_map(无序映射):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
operator[]
,at
,find
- 大小:
size
,empty
以下是C++中各种容器的初始化、赋值、访问、插入、删除和修改元素方法的对照表:
vector(向量)
set(集合)
map(映射)
list(列表)
queue(队列)
deque(双端队列)
文章知识点与官方知识档案匹配,可进一步学习相关知识
在C++的标准模板库(STL)中,不同的容器有各自独特的属性和用途。以下是一些常见STL容器的比较:
顺序容器:
-
vector
: 动态数组,提供快速随机访问。适合于元素数量经常变化的情况。 -
deque
: 双端队列,与vector类似,但在前端插入和删除操作更高效。 -
list
: 双向链表,支持快速插入和删除,但不支持随机访问。 -
forward_list
: 单向链表,与list类似,但仅支持单向顺序访问。 -
array
: 固定大小数组,支持快速随机访问,但大小在编译时固定。
关联容器:
-
set
: 基于红黑树的集合,元素唯一且自动排序。 -
multiset
: 类似set,但允许重复元素。 -
map
: 基于红黑树的键值对集合,每个键唯一。 -
multimap
: 类似map,但允许键有重复。
无序关联容器:
-
unordered_set
: 基于哈希表的集合,元素唯一,不自动排序。 -
unordered_multiset
: 类似unordered_set,但允许重复元素。 -
unordered_map
: 基于哈希表的键值对集合,每个键唯一。 -
unordered_multimap
: 类似unordered_map,但允许键有重复。
容器适配器:
-
stack
: 后进先出(LIFO)的容器适配器。 -
queue
: 先进先出(FIFO)的容器适配器。 -
priority_queue
: 元素按优先级出队的容器适配器。
每种容器都有其特定的使用场景。例如,如果需要频繁在序列中间插入和删除元素,list
或 forward_list
可能是最佳选择。如果需要快速访问任意元素,vector
或 array
可能更合适。对于需要键值对存储且有唯一键的数据,map
是一个好的选择,而当数据中键可以重复时,可以使用multimap
。无序关联容器通常在元素不需要排序且插入和查找操作非常频繁时使用。
下面是一些容器插入,删除,访问,大小操作方法概览:
vector(向量):
- 插入:
push_back
,insert
- 删除:
pop_back
,erase
- 访问:
operator[]
,at
,front
,back
- 大小:
size
,empty
,resize
deque(双端队列):
- 插入:
push_back
,push_front
,insert
- 删除:
pop_back
,pop_front
,erase
- 访问:
operator[]
,at
,front
,back
- 大小:
size
,empty
,resize
list(列表):
- 插入:
push_back
,push_front
,insert
- 删除:
pop_back
,pop_front
,erase
- 访问:
front
,back
- 大小:
size
,empty
map(映射):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
operator[]
,at
,find
- 大小:
size
,empty
set(集合):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
find
,count
- 大小:
size
,empty
queue(队列):
- 插入:
push
- 删除:
pop
- 访问:
front
,back
- 大小:
size
,empty
stack(栈):
- 插入:
push
- 删除:
pop
- 访问:
top
- 大小:
size
,empty
unordered_set(无序集合):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
find
,count
- 大小:
size
,empty
unordered_map(无序映射):
- 插入:
insert
,emplace
- 删除:
erase
- 访问:
operator[]
,at
,find
- 大小:
size
,empty
以下是C++中各种容器的初始化、赋值、访问、插入、删除和修改元素方法的对照表:
vector(向量)
set(集合)
map(映射)
list(列表)
queue(队列)
deque(双端队列)