zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第八周学习进度
    《梦断代码》阅读笔记01
    冲刺记录一
    NABCD简介
    第七周学习进度
    《编程珠玑》阅读笔记03
    第六周学习进度
    数据库数据定期同步实现
    数据库之间的数据同步
    数据同步——otter
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4514581.html
Copyright © 2011-2022 走看看