yes*_*aaj 3 c++ vector deque gotw
参考HerbSutter的文章Gotw 54,他解释说
正确的"收缩适合"矢量或deque和
完全清除矢量或双端队列的正确方法
我们可以使用
container.resize()和container.clear()执行上述任务,还是我错过了什么?
向量包含两个不同的东西:sizeVs capacity.如果只是resize向量,则无法保证容量(保留多少内存)必须更改.resize是一个涉及你使用了多少的操作,而不是矢量容量是多少.
所以举个例子.
size == how much you are using
capacity == how much memory is reserved
vector<int> v(10);
v.resize(5); // size == 5 but capacity (may or may) not be changed
v.clear() // size == 0 but capacity (may or may) not be changed
Run Code Online (Sandbox Code Playgroud)
最后,每次操作都不应该改变容量,因为这会带来大量的内存分配/释放开销.他说如果你需要" 释放 " vector所保留的内存,那就去做吧.