我们需要一种方法能把容器的容量从之前的最大值缩减为当前需要的数量,这种对容量的缩减被称为"shrink to fit"。先看代码实现:
vector<int> vi;
...
// 从vi中除去多余的容量
vector<int>(vi).swap(vi);
表达式vector<int>(vi)创建一个临时变量,它是vi的副本,是由vector的复制构造函数来完成的。
注意,vector的复制构造函数只为所复制的元素分配需要的内存,所以临时变量没有多余的变量。
然后把vector<int>(vi)和vi做swap操作,就达到了除去多余容量的目的。
对于string也适用:
string s;
// 让s变大,然后删除它的大部分字符
......
string(s).swap(s)
类似地,swap可以用来清除一个容器,使得其容量减少。只要与一个用默认构造函数创建的vector或string做swap操作就可以了:
vector<int> v;
string s;
...
// 清除v并把它的容量变为最小
vector<int>().swap(v);
// 清除s并把它的容量变为最小
string().swap(s);