为什么不在GotW 54中调整大小并清除作品?

yes*_*aaj 3 c++ vector deque gotw

参考HerbSutter的文章Gotw 54,他解释说

  1. 正确的"收缩适合"矢量或deque和

  2. 完全清除矢量或双端队列的正确方法

我们可以使用container.resize()container.clear()执行上述任务,还是我错过了什么?

Ara*_*raK 6

向量包含两个不同的东西: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所保留内存,那就去做吧.