STL——STL中vector的实现原理
2016-03-24 21:33
369 查看
STL中vector的实现原理:
vector的数据安排以及操作方式与array非常类似。两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置好了就不能再改变了。如果程序需要一个更大空间的array,只能自己再申请一个更大的array,然后将以前array中的内容全部拷贝到新的array中。
vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新的元素。
vector的关键技术在于其对大小的控制以及重新配置时的数据移动效率。
vector采用的数据结构很简单:线性的连续空间。
它以两个迭代器start和finish分别指向配置得来的连续空间中目前已经被使用的空间。迭代器end_of_storage指向整个连续空间的尾部。
为了降低空间配置时候的速度,vector实际配置的大小可能比客户端需求量更大一些,以备将来可能的扩充。
如果vector在增加一个元素的时候,超过了自身最大的容量。vector则将自身的容量扩充至原来的两倍。
扩充空间需要经过的步骤:重新配置空间,元素移动,释放旧内存空间。(vector机制将旧空间中的备用空间也拷贝到新空间来了,感觉没必要)
一旦vector空间重新配置,则指向原来vector的所有迭代器都失效了,因为vector的地址改变了。
相关文章推荐
- HDUOJ2553-N皇后问题
- 【菜鸟手打js】@弹出遮罩层显示大图之三
- logging的使用
- 第四周项目(3)-随机数函数应用于游戏
- 对Object类中方法的理解
- poj 3311 Hie with the Pie 旅行商问题变形 记录最短路径压缩状态
- 查找进程对应的PID和对应的端口号
- 经典排序之 冒泡排序
- 找不到该项目,请确认该项目的位置的办法(转)
- HDU 2717Catch That Cow
- LeetCode#105. Construct Binary Tree from Preorder and Inorder Traversal
- 【Android压力测试】monkey压力测试(很全、很详细)
- 一个简单的分钱问题:用一毛二毛五毛组合一块
- linux下安装升级mysql到新版本(5.1-5.7)
- 初始mybatis (mybatis开发环境的搭建)
- 待整理
- bitmap heap scan
- poj-1503-java大数相加
- python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表
- 计算100以内的素数