STL-容器
来源:互联网 发布:网络语辣条是什么意思 编辑:程序博客网 时间:2024/04/29 01:50
容器
1.容器种类、容器的内存管理和分配策略
随机访问迭代器,支持[n]、+n等跳跃式访问
双向访问迭代器,只支持自增++、自减--的访问操作
a. 【序列式容器】vector(动态数组)
a) 迭代器:随机访问迭代器+迭代器失效问题见上
b) 内存分配与管理策略:整块连续内存+容器满时插入元素,申请两倍于现在大小的内存,然后元素全部拷贝过去
c) 其他问题
i. Clear:clear并不释放vector所占的空间,虽然size变成了0。
ii. 快速释放vector所占内存:vector<string>(v).swap(v),创建一个临时变量和原有容器交换,临时变量会马上超出它的scope,死掉,释放所占内存。
b. 【序列式容器】list(双向循环链表)
a) 迭代器:双向访问迭代器+迭代器失效问题见上
b) 内存分配与管理策略:节点存储在不连续的内存空间+链表的内存管理那一套
c. 【序列式容器】deque(双端双向队列)
a) 迭代器:随机访问迭代器+迭代器失效问题见上
b) 内存分配与管理策略:分段连续的线性空间+一块主控map(缓冲区索引表)
d. 【序列式容器的适配器】stack(栈)
a) 迭代器:无迭代器,栈的先进后出特性不允许它拥有迭代器
b) 内存分配与管理策略:由双端双向队列deque封闭一口改造而成,内存分配与管理同deque
e. 【序列式容器的适配器】queue(队列)
a) 迭代器:无迭代器,队列的先进先出特性不允许它拥有迭代器
b) 内存分配与管理策略:由双端双向队列deque封闭一口改造而成,内存分配与管理同deque
f. 【序列式容器的适配器】heap(大顶堆)
a) 迭代器:无迭代器,大顶堆取最大元素的特性不允许它拥有迭代器
b) 内存分配与管理策略:由vector+heap算法改造而成,内存分配与管理同vector
g. 【序列式容器的适配器】priority_queue(优先级队列)
a) 迭代器:无迭代器,优先级队列取最大值的特性不允许它拥有迭代器
b) 内存分配与管理策略:由heap改造而成,内存分配与管理同vector
h. 【关联式容器】RB-Tree(红黑树)(平衡树)
a) 红黑树定义
i. 根节点为黑;叶节点(NULL节点)为黑
ii. 节点不是红色就是黑色
iii. 红节点的子节点一定是黑节点
iv. 任意节点到其叶节点的黑节点个数是决定的
b) 红黑树是一棵平衡树
i. 上述性质决定最短分支全黑,最长全红,最长为最短2倍,所以平衡
c) 插入删除
i. 本质都是为了保证黑节点个数到分支相同这一特性。删的时候都是黑转红,插得时候会有红转黑
ii. 根据只有一个分支的二叉查找树的时间复杂度为O(n)、满二叉树的二叉查找树时间复杂度为O(log2N),及夹逼准则可得红黑树的增删查改时间复杂度为Ologn
i. 【关联式容器】set(集合)/mutilset
a) 由红黑树实现
b) Set的元素即其键值
c) 非随机访问迭代器,所以插入不会使迭代器失效(双层架构迭代器)
d) Mutilset:允许键值重复
j. 【关联式容器】map(映射)/multimap
a) 由红黑树实现
b) map的元素为pair,一对键-值
c) 非随机访问迭代器,所以插入不会使迭代器失效(双层架构迭代器)
d) Mutlimap:允许键值重复
k. 【关联式容器】hash_set、hash_map
a) 由hash表实现
b) Hash表冲突解决方案
i. 线性探测:+1,+2,+3···容易导致堆积问题
ii. 二次探测:+1^2,-1^2,+2^2,-2^2,+3^2,-3^2···次堆积问题
iii. 开链法(类似桶排的东西):相同的值存在一个链表里
2.容器的选择
a) hash_map与map的选择【漂亮代码的理解:使用尽量小的代价,出效果】
i. hash_map的查找时间是常数级的,但是为了消灭次堆积问题,使装填度尽量小,它所占的内存是远大于它实际使用的。map由红黑树实现,所以它的增删查改的时间复杂度为O(logn),慢于hash_map,但是它不会像hash_map一样占有很大的内存。
ii. 不在意内存,在意速度的话使用hash_map;在意内存,不在意速度使用map
b) Vector、list、deque
i. 注重查改能力用vector;注重增删能力用list;前后增删+好的查改用deque
c) Stack、queue、priority_queue等
i. 特殊能力使用
- STL 容器
- STL容器
- STL容器
- STL容器
- STL容器
- STL:容器
- STL容器
- STL容器
- STL-容器
- STL容器
- STL容器
- STL 容器
- stl 容器
- STL容器
- STL容器
- STL 容器
- STL容器
- STL容器
- LDD: Ch 4 调试技术
- HDOJ--2023
- 创龙 TMS320DM8148 开发板
- 浅谈Adaboost算法
- 通信实验结果处理计算器
- STL-容器
- html embed用法
- struct的初始化及其构造函数 http://blog.csdn.net/niuox/article/details/7253374
- Bmob之个人资料设置(二)
- disk 变成missing 后的解决
- OpenCv学习笔记之图像平滑处理
- Mybatis 多条件查询(模糊查询 使用in查询)
- HDOJ--2024
- 用xib加载初始化要在awakeFromNib方法里实现