mat*_*ort 44
resize()
较小尺寸的呼叫对a的容量没有影响vector
.它不会释放内存.
用于从释放内存的标准成语vector
是swap()
它具有空临时vector
:std::vector<T>().swap(vec);
.如果要向下调整大小,则需要从原始向量复制到新的本地临时向量,然后将生成的向量与原始向量交换.
更新: C++ 11 shrink_to_fit()
为此添加了一个成员函数,它是一个非约束请求,以减少capacity()
为size()
.
GMa*_*ckG 24
实际上,该标准确实指明了应该发生的事情:
这是从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
Run Code Online (Sandbox Code Playgroud)
也就是说:如果指定的大小resize
小于元素的数量,那么这些元素将从容器中删除.关于capacity()
,这取决于erase()
它做了什么.
我无法在标准中找到它,但我很确定clear()
定义为:
void clear()
{
erase(begin(), end());
}
Run Code Online (Sandbox Code Playgroud)
因此,影响clear()
了上capacity()
还绑在效果erase()
上有.根据标准:
23.2.4.3向量修饰符[lib.vector.modifiers]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
Run Code Online (Sandbox Code Playgroud)
4)复杂性:T的析构函数被称为等于被删除元素数量的次数....
这意味着元素将被破坏,但内存将保持不变.erase()
因此对容量没有影响resize()
,clear()
也没有影响.