std::vector
有两个大小:
- 一个是容量,和占用内存空间相关,即
capacity()
。 - 一个是数据大小,即
size()
;
对应有两个操作:
reserve(n)
会预留容量,如果n
小于当前容量,什么也不会做。resize(n)
会调整数据大小,当n
小于当前数据大小时,后面的数据将被清空,但容量不变;当n
大于当前容量时,还会扩充容量。
而clear()
等价于resize(0)
,只清除数据,不清除空间,注意容量保持不变!这和clear
的语意会有区别。如果要实现真正的清除(既清除数据,也清除空间),需要用下面两种方法:
v.clear()
之后,再v.shrink_to_fit()
。v.clear()
之后,再std::vector<T>{}.swap(v)
。
Q. E. D.