std::vector 内存释放与创建二维数组

最近看到一篇关于STL vector内存释放的文章,觉得写得很好,链接如下:STL vector 内存释放 - youxin - 博客园

std::vector<int> sv;

sv.push_back(10);

sv.push_back(20);

sv.push_back(30);

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;         

// size 是 3, capacity 也是 3

sv.erase(sv.begin()); //删掉一个

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;          //the size is 2, the capacity is 3

size虽然缩小了,但是capacity没有缩小,说明erase()函数只是删除了元素,并没有释放vector空间

sv.clear();

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;          // the size is 0, the capacity is 3

所有元素都被clear()删除了,但是没有释放vector空间。vector此时像个空箱子

sv.push_back(10);

sv.push_back(20);

sv.push_back(30);

sv.resize(0);

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;          // the size is 0, the capacity is 3

//resize()函数没有释放空间

sv.push_back(10;

sv.push_back(20);

sv.push_back(30);

std::vector<int>().swap(sv);

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;          // the size is 0, the capacity is 0

//swap()函数成功释放了空间。它使vector离开了原来的作用域,导致空间被释放。

sv.push_back(10);

sv.push_back(20);

sv.push_back(30);

sv.resize(0);

sv.shrink_to_fit();

cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;          // the size is 0, the capacity is 0

shrink_to_fit()函数作用为使capacity等于size大小,当size为0时,调用此函数也可以释放空间。

vector创建二维数组,以int类型为例:

创建4行3列数组

vector<vector<int> > array;

array.resize(4);

for (int i=0; i<4; ++i)

{

        array[i].resize(3);

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值