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