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.