码迷,mamicode.com
首页 > 其他好文 > 详细

std中vector的实现原理(标准模板动态库中矢量的实现原理)

时间:2014-08-21 15:03:44      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:vector   vector实现原理   矢量   动态数组   

我们实现的数据结构是为了解决在运行过程中动态的开辟空间使用(例如我们不停的输入,输入的多少我们不确定)

原理两种:

一、笨办法

我们第一次用多少空间,开辟多少空间A

我们第二次用空间,会开辟大于第一次开辟的空间B,将A里的数据拷贝到B中,然后释放A,在C中写入新的数据

缺点:在于拷贝的次数太多,效率低

bubuko.com,布布扣

二、改进的办法

矢量有一个参数,里面填写预留的空间,加入我们填写的预留空间大小是B,这里是预留,并没有真正的开辟物理内存,预留的作用于如果这时候如果需要开辟空间做其他事情,开辟的空间会避开B,这样不好造成在这里的数据变成不连续

然后开辟空间写入数据A,仅占B的一点点而已,vector中的realloc提交数据后操作系统管理内存的机制会映射一个“内存页”4K的空间给你来使用,当在B中继续开辟空间填写数据D,这时候存入D的物理内存并不是真正的开辟,而是接着使用刚刚开辟的“内存页”,只有当4K空间用完,才会再次分配一个页使用

当写入的数据超过B,会重新开辟一块空间C,将B中的数据拷贝入C中,释放B

优点:拷贝次数大大减少,效率提高

bubuko.com,布布扣


std中vector的实现原理(标准模板动态库中矢量的实现原理),布布扣,bubuko.com

std中vector的实现原理(标准模板动态库中矢量的实现原理)

标签:vector   vector实现原理   矢量   动态数组   

原文地址:http://blog.csdn.net/panpen120/article/details/38729177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!