STL vector中的元素删除

删除vector中的元素,最容易的方法就是使用vector的erase()函数。

vector vec;
for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
    if(某条件成立)
        iter = vec.erase(iter);
    else
        iter ++;
}


如果要清空vector中的元素,可以使用erase()循环删除,也可以用clear()函数。


for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
        iter = vec.erase(iter);
}
//或者直接clear
vec.clear();


需要注意, 如果vector中存储的元素是指针 那么erase()或者clear() 并不会删除指针指向的对象或者内存空间 ,要小心内存泄漏问题。
此外,还需要注意的是,erase()函数虽然会删除指定位置的元素,但是 元素所占用的内存空间并不会被释放掉 ,也就是说,被删除的元素所占的内存空间还是被vector占有的,而 没有被系统回收
要解决这个问题可以 使用vector中的swap()函数
假设vector vec起初有1000个元素,后来删掉500个,那么要释放掉那500个int所占的空间,可以这样:
std::vector(vec).swap(vec);
//上面这行代码相当于下面两行
//即先产生一个跟vec中 现有内容 相同且占用空间刚好满足其大小的vector tmp 
//然后把tmp与vec对换
// 当出了 tmp的作用域(例如下面的一对大括号)后,tmp所占的空间就被释放掉了
{
    std::vector tmp(vec);      -------》》tmp里面存放500个元素,且大小空间是500*4;vec里面存放500个元素,且大小空间是1000*4
    tmp.swap(vec);       --------》》 将tmp与vec对调,tmp作为临时变量超出作用域后空间被释放掉,剩下的vec存放500个元素,大小空间是500*4

}

如果要将vector vec的空间全部删掉,可以这样:

{

std:vector tmp(0);

tmp.swap(vec);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值