删除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;
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);
}