实际上,标准确实规定了应该发生的情况:
这是来自vector,但所有容器的主题都是相同的(list、deque 等...)
23.2.4.2 向量容量[lib.vector.capacity]
void resize(size_type sz, T c = T());
6) 效果:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
也就是说:如果指定给resize的大小小于元素个数,这些元素将从容器中删除。关于capacity(),这取决于erase() 对它做了什么。
我无法在标准中找到它,但我很确定 clear() 被定义为:
void clear()
{
erase(begin(), end());
}
因此,clear() 对capacity() 的影响也与erase() 对其的影响有关。按标准:
23.2.4.3 矢量修饰符 [lib.vector.modifiers]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) 复杂度:T的析构函数被调用的次数等于被擦除元素的次数......
这意味着元素将被销毁,但内存将保持不变。 erase() 对容量没有影响,因此resize() 和clear() 也没有影响。