掌握STL的 基本实现和使用方法
来源:互联网 发布:如何建立网络折扣平台 编辑:程序博客网 时间:2024/06/13 23:23
STL共有六大组件
1、容器。2、算法。3、迭代器。4、仿函数。6、适配器。
STL容器的实现原理
STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构.
序列式容器:
vector-数组,元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中。
list-双链表。
deque-分配中央控制器map(并非map容器),map记录着一系列的固定长度的数组的地址.记住这个map仅仅保存的是数组的地址,真正的数据在数组中存放着.deque先从map中央的位置(因为双向队列,前后都可以插入元素)找到一个数组地址,向该数组中放入数据,数组不够时继续在map中找空闲的数组来存数据。当map也不够时重新分配内存当作新的map,把原来map中的内容copy的新map中。所以使用deque的复杂度要大于vector,尽量使用vector。
stack-基于deque。
queue-基于deque。
heap-完全二叉树,使用最大堆排序,以数组(vector)的形式存放。
priority_queue-基于heap。
slist-单向链表。
关联式容器:
set,map,multiset,multimap-基于红黑树(RB-tree),一种加上了额外平衡条件的二叉搜索树。
hash table-散列表。将待存数据的key经过映射函数变成一个数组(一般是vector)的索引,例如:数据的key%数组的大小=数组的索引(一般文本通过算法也可以转换为数字),然后将数据当作此索引的数组元素。有些数据的key经过算法的转换可能是同一个数组的索引值(碰撞问题,可以用线性探测,二次探测来解决),STL是用开链的方法来解决的,每一个数组的元素维护一个list,他把相同索引值的数据存入一个list,这样当list比较短时执行删除,插入,搜索等算法比较快。
hash_map,hash_set,hash_multiset,hash_multimap-基于hash table。
综上所述大家应该知道了什么情况下该使用哪一个STL容器更合适,可以在适当时候避免使用一些影响效率的STL容器.
- 掌握STL的 基本实现和使用方法
- STL基本使用方法总结
- iOS UICollectionViewController基本使用方法和简单的相册实现
- STL中栈和队列的使用方法
- STL中栈和队列的使用方法
- STL中map 和 hash_map 的使用方法
- STL 中栈和队列的使用方法
- STL源码剖析——deque的实现原理和使用方法详解
- STL源码剖析——stack的实现原理和使用方法详解
- Struts2的基本项目实现、简易使用方法
- STL map的使用方法
- STL map 的使用方法
- STL+map的使用方法
- STL 队列的使用方法
- STL容器的基本特性和特征
- STL容器的基本特性和特征
- 【STL】map和set的基本用法
- STL list基本实现
- dynamic_cast.cpp
- 程序员必须掌握的8大排序算法
- 小胖说事18-------集成支付宝SDK时经常出现的错误以及解决办法
- 关于备份数据库中某几张表的方法
- Lua与C通信——Lua API(一)
- 掌握STL的 基本实现和使用方法
- Android很详细的将开源库分类列出的网站
- 解释android:Layout_width 和Android:width的区别还有android:Layout_gravity和android:gravity的区别和用法
- redis session管理
- 实现了一个简单的聊天软件,但是有个BUG,一直没有想通问题出在哪里。
- cron表达式详解
- Ubuntu下MySQL的安装及远程连接配置等配置
- Linux 下使用Sigar 获取内存信息
- Android Studio 1.3 Preview 1 发布下载