C++标准库分析总结(四)——<Vector、Array、Forward_list设计原则>

本文深入探讨了标准库中Vector和Array的设计方法与特性。Vector作为自增长数组,仅通过三根指针控制内存增长,而Array则保持固定大小并利用自然指针进行迭代。文章还分析了Vector的扩容机制及其带来的性能影响。

本节主要总结标准库Vector和Array的设计方法和特性以及相关迭代器内部特征

1、Vector

1.1 Vector 内部实现

  Vector是自增长的数组,其实在标准库中没有任何一种容器能原地扩充,它给人假象的扩充只是在内存的另外一个地方找到一个大的空间,再把原来的数据搬过去;

  Vector只需要3根指针就能完全控制内存的增长,所以在32位机器上sizeof大小为3*4=12

注意:号称连续增长的容器都必须实现中括号[]的运算符重载

1.2 Vector增长模型

  我们使用push_back放元素时它会检查当前是不是有足够空间,在我们一开始创建Vector时,它的大小就是0,所以第一次内存扩充为1,在这个之后如果需要扩充那就扩充到2*现在容器size的大小,之后调用分配器扩充内存,再把原来内容拷贝到新的地方,接着把新的元素安插到末尾,还要进行删掉之前地方的元素释放空间

注意:由于每次扩充都会进行大量拷贝,拷贝就会调用拷贝构造函数和析构函数,会有很大的开销

1.3 Vector迭代器

  算法调用迭代器进行操作时,会调用萃取机询问相关的类型

1.4 新版本内部继承关系

2、Array

2.1 Array内部实现

  Array就是C语言中数据的包装类,正因为有了这层包装,Array才能享受标准库给予6大部件的便利;

  Array必须初始化给定空间大小,期间不允许改变大小,也是连续空间,只要是连续空间其迭代器就可以用自然指针来询问。

3、Forward_list

  forward_list实质就是单向链表

转载于:https://www.cnblogs.com/laiyingpeng/p/11193541.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值