STL—vector

1.vector


  vector相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

2.方法


  size()             

    当前容器中元素的个数。

  capacity()           

    当前容器的容量,包括已用和可用的大小。

  resize(Container::size_type n)  

    强制把容器改为n个元素。该方法调用后,再调用size()会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部,如果n大于当前容量,在元素加入之前会发生重新分配。

  reserve(Container::size_type n) 

    强制容器把它的容量改为至少n,如果n小于当前容量,vector忽略它。这个用来减少内存重新分配。

3.问题


  问题1:如何释放vector的内存?

    clear()函数并不能释放vector的内存,如果vector的元素是对象,则调用clear()会调用对象的析构函数,如果是指针则需要手动调用delete。clear会把数组个数清零,即size() == 0,但是capacity()的值不变,数组本身内存并没有释放。正确释放数组内存的方式是使用swap方法或者C++11推出的shrink_to_fit方法(shrink_to_fit的意思是释放未使用的数组内存,clear之后数组内存都变为未使用):

#include<iostream>
#include<vector>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
    vector<int> v;
	
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    cout << "size:" << v.size() << endl;
    cout << "capacity:" << v.capacity() << endl;

	//vector<int>().swap(v);
    v.clear();
    v.shrink_to_fit();
    cout << "after shrink_to_fit size:" << v.size() << endl;
    cout << "after shrink_to_fit capacity:" << v.capacity() << endl;
    return 0;
}

  

  

 

posted on 2019-03-13 16:46  能量星星  阅读(112)  评论(0编辑  收藏  举报

导航