vector
内存空间只会增加,不会减小,为了支持快速的随机访问,vector
容器的元素以连续的方式存放,每个元素都紧挨着前一个元素存储。当vector
添加一个元素时,为了满足连续存放这个特性,需要重新分配空间,拷贝元素,撤销旧空间,这样性能难以接受。因此STL
在对vector
进行内存分配时,其实际分配的容量要比当前所需的空间多一些。
vector
有两个函数:
capacity()
返回对象缓冲区(vector
维护的内存空间)实际申请空间大小size()
返回当前对象缓冲区存储数据的个数。对于
vector
来说,capacity
永远大于等于size
, 当capacity
和size
相等时,vector
就会扩容,capacity
变大。
vector
内存空间只增加不减少,我们常用的操作clear()
和erase()
,实际上只减少size()
, 清除了数据,并不会减少capacity
, 内存空间没有减少。
vector<Point>.swap(pointVec)
ShunFa Zhang 01 July 2018
swap
交换技巧实现内存释放的思想:vector()
使用vector
的默认构造函数建立临时vector
对象,再在该临时对象上调用swap
对象,swap
调用之后原来vector
占用的空间就等于一个默认构造的对象的大小,临时对象就具有原来对象v的大小,而该临时对象随即会被析构,从而其占用的空间也会被释放。