vector容器是自增长的。一般的,在容器对象中insert或push一个元素时,该对象的大小增加1。.
而且vector中的元素是连续存放的,当在容器中增加一个新元素时,如果原来的储存空间刚好被用完,那么系统需要重新寻找一个更大的连续储存空间,把原来的元素复制到新空间,并在最后添加新元素,最后再撤销旧空间。更特殊情况下,假设每次vector添加一个元素时,空间都被用完,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。
关于vector的内存空间,有两个函数需要注意:size()成员指当前拥有的元素个数;capacity()成员指当前(容器必须分配新存储空间之前)可以存储的元素个数。reserve()成员可以用来控制容器的预留空间。
每当系统预先分配一块capacity大小的空间,当插入的数据超过这个空间的时候,这块空间会让某种方式扩展,但是你删除数据的时候,它却不会缩小。
这样便造成一个问题,即使 你使用clear()函数清空容器,系统为容器分配的capacity大小的空间依然存在。
而调用reserve(0),也不能使容器的预留空间变为0。
所以在相关资料中有人提到以swap()函数来释放vector内存。
vector<int> ivec(5,2); //使用5