Séb*_*rra 60
有效的STL,作者:Scott Meyers,第17项:使用swap技巧来减少多余的容量.
vector<Person>(persons).swap(persons);
Run Code Online (Sandbox Code Playgroud)
在那之后,persons"缩小到适合".
这依赖于以下事实:vector复制构造函数仅根据所复制元素的需要分配内存.
Ale*_*ban 18
如果您使用的是C++ 11,则可以使用vec.shrink_to_fit().至少在VS2010中,这对你来说是交换技巧.
从现有的向量中创建一个新的临时向量,然后在现有向量上调用swap方法,传递临时方法.让临时(现在使用旧的超大缓冲区)超出范围.
嘿presto,你的矢量具有完全正确的内容大小.
如果这听起来像是大量的复制和分配 - 请记住,这就是向量每次必须重新分配超过其当前保留限制时所做的事情.
[编辑]是的,我刚才用更多的话说塞巴斯蒂安.stackoverflow竞争条件的另一个案例;-)