• 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实质就是单向链表

    作者:灼光
    本博客文章大多为原创,转载请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    如何在mysql下建立数据库?并设置密码
    JVM(Java虚拟机)优化大全和案例实战
    Java性能优化之JVM GC(垃圾回收机制)
    百度地图坐标系和火星坐标系之间的互相转换
    Dealloc 在哪个线程执行
    iOS夯实:ARC时代的内存管理
    iOS夯实:内存管理
    iOS 7 使用导航控制器后有关根视图高度及位置的那些事
    Xcode6之找回之前的闪屏
    iOS 关于tableView cell的分割线的一些设置
  • 原文地址:https://www.cnblogs.com/laiyingpeng/p/11193541.html
Copyright © 2020-2023  润新知