标准库--容器

发布时间:2024年01月21日

1.vector
(1). 支持的迭代器类别
random_access_iterator_tag
(2). 内存组织
逻辑上连续的元素,线性地址空间内也连续。
(3). 内存扩张和收缩
a. 初始化时会默认分配一块可容纳指定数量的线性地址空间。
b. 执行reserve(n),在现有地址空间不足容纳n个元素时,会分配新空间以便可容纳n个元素。老空间会释放,老元素会转移。
c. 执行shrink_to_fit()会在size()<capcity()时,分配新空间恰好可容纳size()个元素。老空间会释放,老元素会转移。
d. 执行insert在现有空间无法容纳新元素时,触发容纳扩展。
(4). 线程安全
不提供线程安全保护。

2.list
(1). 支持的迭代器类别
bidirectional_iterator_tag
(2). 内存组织
逻辑上连续的节点,线性地址空间不连续。
(3). 内存扩展和收缩
a. 每次插入新节点,需为其分配线性空间,再插入。
b. 每次移除节点,需释放其线性空间。
(4). 线程安全
不提供线程安全保护。

3.stack
(1). 支持的迭代器类别
不支持迭代器
(2). 内存组织
stack是对逻辑操作施加限制的容器,即插入,删除只能在栈顶进行。
可以基于数组实现,也可基于链表实现。
(3). 线程安全
不提供线程安全保护。

4.deque
(1). 支持的迭代器类别
原则上可以不支持迭代器。
(2). 内存组织
deque是对逻辑操作施加限制的容器,即插入必须在尾部,删除只能在头部。
可以基于数组实现,也可基于链表实现。
(3). 线程安全
不提供线程安全保护。

5.map,set,mulmap,mulset
mapset都是基于平衡二叉树实现的容器。
map支持pair<key, value>形式的元素插入。set插入时直接是key。
mul版本和非mul版本的区别在于是否允许插入时,同一个key被插入多次。
(1). 支持的迭代器类别
bidirectional_iterator_tag
(2). 内存组织
有序二叉树组织。
(3). 线程安全
不提供线程安全保护。

6.unordered_map,unordered_set,mulunordered_map,mulunordered_set
基于链式哈希表实现的容器。
map支持pair<key, value>形式的元素插入。set插入时直接是key
mul版本和非mul版本的区别在于是否允许插入时,同一个key被插入多次。
(1). 支持的迭代器类别
forward_iterator_tag
(2). 内存组织
链式哈希表,一般采用数组作为槽结构。以便采用链表来组织同一个槽下各个元素。
(3). 线程安全
不提供线程安全保护。

文章来源:https://blog.csdn.net/x13262608581/article/details/135725523
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。