STL实现的底层数据结构简介

STL实现的底层数据结构简介

C++ STL 的实现:

1.vector  底层数据结构为数组 ,支持快速随机访问

2.list    底层数据结构为双向链表,支持快速增删

3.deque   底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

4.stack   底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

5.queue   底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

6.45是适配器,而不叫容器,因为是对容器的再封装

7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

8.set       底层数据结构为红黑树,有序,不重复

9.multiset  底层数据结构为红黑树,有序,可重复

10.map      底层数据结构为红黑树,有序,不重复

11.multimap 底层数据结构为红黑树,有序,可重复

12.hash_set 底层数据结构为hash表,无序,不重复

13.hash_multiset 底层数据结构为hash表,无序,可重复

14.hash_map      底层数据结构为hash表,无序,不重复

15.hash_multimap 底层数据结构为hash表,无序,可重

转自http://blog.csdn.net/huangkq1989/article/details/7277282

时间: 2024-08-27 10:23:52

STL实现的底层数据结构简介的相关文章

STL底层数据结构

STL底层数据结构 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问 4.stack 底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时 5.queue 底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制, 扩容

STL底层数据结构实现

C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问 2.list            底层数据结构为双向链表,支持快速增删 3.deque       底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问 deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下: [堆1] --> [堆2] -->[堆3] --> ... 每个堆保存

验证list的底层数据结构

<STL源码剖析>中,指出SGI STL的list底层数据结构式循环双向链表,并且在链表尾端留一个空白节点,让end指向它.由于是双向的,那么list的迭代器必须是Bidirectional Iterator类别的. 下面,分别验证vs2010下和code blocks(gcc)下,list的底层实现是否是循环链表. #include<list> #include<iostream> using namespace std; int main(){ list<in

Redis 概念以及底层数据结构

Redis 简介REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型. R

[转]java 的HashMap底层数据结构

java 的HashMap底层数据结构 HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存.取value.下面就来分析HashMap的存取. 一.定义 HashMap实现了Map接口,继承AbstractMap.其中Map接口定义了键映射到值的规则,而AbstractM

浅析Linux驱动模型中的底层数据结构kobject和kset

1.kobject Linux内核用kobject来表示一个内核对象.它和Sysfs文件系统联系密切,在内核中注册到系统中的每个kobject对象在sysfs文件系统中对对应着一个文件目录.kobject数据结构通常的用法是嵌入到其对他的数据结构中(即容器,比如cdev结构),用于实现内核对该类数据结构对象的管理.这些数据结构(容器)通过kobject连接起来,形成了一个树状结构. 它在源码中的定义为: /*<include/linux/kobject.h>*/ struct kobject

C#中经常使用容器的使用与底层数据结构

从使用的频率一个个来简单说一下. Array/ArrayList/List/LinkedList Array 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,并且赋值与改动元素也非常easy. string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b"; //改动 s[1]="a1"; 可是数组存在一些不足的地方.在数组的两个数据间插入数据是非常麻烦的,并且在声明数组的时候必须指定数组

Objective-C底层数据结构

Objective-C底层数据结构 Objective-C底层数据结构 类的数据结构 Class(指针) typedef struct objc_class *Class; /* 这是由编译器为每个类产生的数据结构,这个结构定义了一个类.这个结构是通过编译器在执行时产生,在运行时发送消息时使用.因此,一些成员改变了类型.编译器产生"char* const"类型的字符串指针替代了下面的成员变量"super_class" */ struct objc_class { s

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一