引用文章Gotw 54通过 HerbSutter,他解释了
“收缩以适应”的正确方法 vector 或双端队列和
完全清除 vector 或的正确方法 双端队列
Can we just use
container.resize()
andcontainer.clear()
for the above task or am I missing something?
最佳答案
vector 包含两种不同的东西:size
和 capacity
。如果您只是调整
vector,则不能保证容量(保留多少内存)一定会改变。 resize
是一个与您使用了多少有关的操作,而不是 vector 容量有多少。
例如。
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
最后,容量不应该在每次操作时都改变,因为那会带来大量的内存分配/释放开销。他是说,如果您需要“解除分配”由 vector 保留的内存,请执行此操作。
关于c++ - 为什么不在 GotW 54 中调整和清除作品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720953/