微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

本节主要总结标准库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实质就是单向链表

分享图片

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐