zoukankan      html  css  js  c++  java
  • 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实质就是单向链表

    作者:灼光
    本博客文章大多为原创,转载请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    修改oracle的sys、system密码
    错误随手笔记
    JS 全选
    ider向虚拟机上传jar包
    Spring中的八大设计模式
    事务的隔离级别
    hive常用函数全集
    Kafka常用命令
    字符设备驱动框架学习总结
    根文件系统熟悉(一)根文件系统构建过程记录
  • 原文地址:https://www.cnblogs.com/laiyingpeng/p/11193541.html
Copyright © 2011-2022 走看看