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

上一篇:copy and swap技巧与移动赋值操作符


下一篇:浏览器的DNS缓存