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