STL容器都是用什么数据结构实现的
时间: 2024-05-29 10:10:49 浏览: 85
STL容器使用不同的数据结构实现不同的功能。
以下是STL容器的数据结构:
1. vector:动态数组,使用连续的内存空间存储元素。
2. deque:双端队列,使用一系列连续的数组块存储元素。
3. list:双向链表,每个元素存储自己的值和指向前一个和后一个元素的指针。
4. set:红黑树,元素按照键值排序,不允许重复。
5. map:红黑树,元素按照键值排序,每个元素包含一个键和一个值,不允许重复键。
6. unordered_set:哈希表,元素不按照任何顺序存储,不允许重复。
7. unordered_map:哈希表,元素不按照任何顺序存储,每个元素包含一个键和一个值,不允许重复键。
相关问题
stl容器的底层实现的数据结构
stl容器的底层实现的数据结构是不同的,每个容器都有自己的底层数据结构。下面是一些常见的stl容器及其底层数据结构:
1. vector:底层使用动态数组实现,通过连续的内存块存储元素。
2. list:底层使用双向链表实现,每个节点包含元素值以及指向前一个和后一个节点的指针。
3. deque:底层使用分段连续的动态数组实现,通过多个连续的内存块存储元素。
4. map/set:底层使用红黑树(一种自平衡二叉搜索树)实现,通过节点存储键值对或单个元素,并按照键的顺序进行排序。
5. unordered_map/unordered_set:底层使用哈希表实现,通过哈希函数将键映射到桶(bucket),每个桶存储一个链表或红黑树。
6. stack/queue:这些容器通常是在vector、deque或list的基础上进行封装实现的,没有特定的底层数据结构。
stl容器底层数据结构
STL容器的底层数据结构是数组。具体来说,当向器中添加元素时,如果容器已经满了,它会扩展空间为原来的2倍。当实际元素数量低于分配空间的1/4时,容器会将空间回收为原来的一半。这是通过先申请新的空间,然后将旧空间的内容拷贝过去,最后释放旧的空间来完成的。《STL源码剖析》一书中没有详细讲述空间的回收,这是我之前查找资料时了解到的信息。<span class="em">1</span>
#### 引用[.reference_title]
- *1* [STL各容器底层数据结构总结](https://blog.csdn.net/u014209688/article/details/90614074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文