C++


C++

vector

vector内存空间只会增加,不会减小,为了支持快速的随机访问,vector容器的元素以连续的方式存放,每个元素都紧挨着前一个元素存储。当vector添加一个元素时,为了满足连续存放这个特性,需要重新分配空间,拷贝元素,撤销旧空间,这样性能难以接受。因此STL在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。

vector 有两个函数:

对于vector来说, capacity永远大于等于size, 当capacitysize相等时, vector就会扩容,capacity变大。

vector内存释放

vector内存空间只增加不减少,我们常用的操作clear()erase(),实际上只减少size(), 清除了数据,并不会减少capacity, 内存空间没有减少。

vector<Point>.swap(pointVec)

swap交换技巧实现内存释放的思想:vector()使用vector的默认构造函数建立临时vector对象,再在该临时对象上调用swap对象,swap调用之后原来vector占用的空间就等于一个默认构造的对象的大小,临时对象就具有原来对象v的大小,而该临时对象随即会被析构,从而其占用的空间也会被释放。

ShunFa Zhang 01 July 2018
blog comments powered by Disqus