• the swap trick用于锐减过剩容量


    1、由于vector的复制构造函数只为被复制的vector分配它所需要的空间,故可以用如下的方式来削减vector v中过剩的容量:vector<int>(v).swap(v)

    2、the swap trick在交换两个容器内容的时候,将会交换两个容器的迭代器,指针和引用。

    std::vector<T>().swap(X)

    作用相当于:

    {

    std::vector<T>  temp(X);

    temp.swap(X);

    }

    void swap(vector<_Tp, _Alloc>& __x) {
        __STD::swap(_M_start, __x._M_start);
        __STD::swap(_M_finish, __x._M_finish);
        __STD::swap(_M_end_of_storage, __x._M_end_of_storage);
      }

    vector的swap成员函数   

    在复制构造函数之后,得到的temp的大小是所需的空间大小,没有多余空间,调用swap之后,temp中的迭代器和指针指向的是vector X,而vector X指向的是temp。这样当temp跳出大括号之后,进行析构,释放内存是原来X的内存。这样temp申请的内存就用于X。

    注意:

    1.容器的成员函数的swap是调用std::swap,交互的是指针和迭代器

    2.使用这种trick之后,原先的内存以及不存在了

    3.复制拷贝构造函数,得到的是所需最小内存,其实就是finish==end_storage

  • 相关阅读:
    区块链学习(2)钱包
    区块链学习(1)密钥,公钥和地址
    Ubuntu下安装和开启telnet
    ubuntu下的ppa源使用
    tensorflow中手写识别笔记
    交叉熵解读
    Ubuntu下对executable (application/x-executable)文件创建快捷方式
    Numpy学习笔记(四)
    pycharm问题总结
    Numpy学习笔记(三)
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4514581.html
Copyright © 2020-2023  润新知