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.swap(vec);
}

感谢:http://blog.csdn.net/ywh147/article/details/9345715

时间: 2024-11-14 13:43:24

vector中的元素删除的相关文章

典型问题分析4—StaticLinkList中数据元素删除时的效率问题

StaticLinkList中数据元素删除时的效率问题 void destroy(Node* pn) { SNode* space = reinterpret_cast<SNode*>(m_space); SNode* psn = dynamic_cast<SNode*>(pn);//从父类指针,转换为子类指针,直接调用dynameic_cast for(int i=0; i<N; i++) { if(psn == (space + i)) { m_used[i] = 0;

javascaipt中数组元素删除方法delete和splice

一.用delete 删除数组中元素(少用) 说明:delete: 只是被删除的元素变成了 undefined ,即数组长度不变 //定义数组 var array=["aa","dd","cc","aa"]; //方法1:delete删除数组元素 delete array[1]; //输出结果 : ["aa",undefined,"cc","aa"] getArray(

javascript中数组元素删除方法splice,用在for循环中巨坑

一.demo splice: 该方法会改变自动原始数组长度 实例: var array = ["aa","dd","cc","aa"]; //方法2:删除数组元素 array.splice(1,1); //输出结果:["aa","cc","aa"] getArray(array); 输出:aa cc aa 数组长度自动减一 二.实际业务场景中 在for循环中使y用 t

有两个数组a和b,把a出现在b中的元素删除,且a自己里面重复的元素也删除。

#include "stdafx.h"int a[] = { 1,2,3,4,5,6,6,5,9,1,2 };int b[] = {5,6};int LEN = sizeof(a) / sizeof(a[0]);void yiwei(int* a,int b) { for (int i = b;i < LEN ;i++) { a[i] = a[i + 1]; } } int main(){ for (int i = 0;i < LEN;i++) { printf("

STL 中 使用迭代器删除元素的问题

在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. 1 for(auto iter = v.begin(), iter!=v.end(); iter++) 2 { 3 if(iter == 3) 4 v.erase(iter); 5 } 因此vector中正确的删除的方法是: for(auto iter = v.begin(), iter!=v.end(); /*iter++*/) {

java.util.vector中的vector的详细用法

ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创建.向Vector中添加元素.从Vector中删除元素. * 统计Vector中元素的个数和遍历Vector中的元素. */ public class VectorDemo{ public static void main(String[] args){ //Vector的创建 //使用Vector

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法. C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换. 1.std::vector::erase() 函数原型:iterator erase (iterator position); //删除指定元素 iterator erase (iterator first, iterator last); //删除指定范围内的元素 返回值:指向删除元素(或

删除vector中的偶数元素,删除list中的奇数元素

#include<vector> #include<list> #include<iostream> using namespace std; int main() { vector<int> vec={0,1,1,2,3,5,8,21,55,89}; list<int> li={0,1,1,2,3,5,8,21,55,89}; auto ve=vec.begin(); auto it=li.begin(); while(ve!=vec.end(

删除vector中元素高效的方法

#include <iostream> #include <vector> using namespace std; int main() { std::vector<int> ve1; ve1.push_back(1); ve1.push_back(2); ve1.push_back(3); ve1.push_back(4); ve1.push_back(5); ve1.push_back(6); std::vector<int>::iterator it