删除vector中的元素

1.删除指定的所有对象

STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()。例子:

vector<int> vecTemp;

vecTemp.push_back(2);

vecTemp.push_back(4);

vecTemp.push_back(2);

vecTemp.push_back(5);

//原始元素顺序为2,4,2,5

remove(vecTemp.begin(),vecTemp.end(),2);

//remove后的结果为4,5,2,5

可以看到除了前面的4,5是正确的后面的没有用了

若真要删除,则:

vecTemp.erase(remove(vecTemp.begin(),vecTemp.end(),2),vecTemp.end());

//输出结果为4,5

2.如果删除一个元素后要进行其它操作,如写日志等,那么就不能用上面的方法,改用循环,但需要注意,erase()之后的迭代器将失效,而erase()的返回值为当前位置的下一个位置,可以利用其返回值。例子:

vector<int>vecTemp;

vecTemp.push_back(2);

vecTemp.push_back(4);

vecTemp.push_back(2);

vecTemp.push_back(5);

vector<int>::iterator i;

for(i=vecTemp.begin(); i!=vecTemp.end(); )

{

if(*i == 2)

{

i = vecTemp.erase(i);

}

else

{

++i;

}

}

下面的循环是不对的,运行时会出错

vector<int>::iteratori;

for(i=vecTemp.begin(); i!=vecTemp.end(); ++i)

{

if(*i == 2)

{

vecTemp.erase(i);//执行完后i已经失效

}

}

删除list中的元素

1.删除所有指定的对象

list<int> listTemp;

listTemp.push_back(2);

listTemp.push_back(4);

listTemp.push_back(2);

listTemp.push_back(6);

listTemp.push_back(5);

listTemp.remove(2);

2.删除每个元素后,进行其他操作如写日志,输出等,上面的就不能满足要求,需要采用循环,但要注意erase()后迭代器失效的问题,与vector删除时一样。

例子:

list<int> listTemp;

listTemp.push_back(2);

listTemp.push_back(4);

listTemp.push_back(2);

listTemp.push_back(6);

listTemp.push_back(5);

list<
int>::iterator k;

for(k=listTemp.begin(); k!=listTemp.end(); )

{

if(*k == 2)

{

cout<<"删除一个元素"<<endl;

k = listTemp.erase(k);

}

else

{

++k;

}

}

STL删除vector或list的方法及注意的问题的更多相关文章

  1. STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase

    今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0         这个程序使用了vect ...

  2. C++的STL中vector内存分配方法的简单探索

    STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio ...

  3. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  4. C++STL之Vector向量详解,用法和例子 一起学习 一起加油

                                                                                    C++ STL之vector用法总结 1 ...

  5. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  6. C++-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  7. 转 STL之vector的使用

    http://www.cnblogs.com/caoshenghe/archive/2010/01/31/1660399.html 第一部分 使用入门 vector可用于代替C中的数组,或者MFC中的 ...

  8. 【C++】STL,vector容器操作

    C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...

  9. STL之vector常用函数笔记

    STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...

随机推荐

  1. STM32f103------ADC(DMA)

    STM32F10x  ADC 技术指标: 分辨率: 12位分辨率  LSB=Vref+  / 2^(12) 转换时间: 采样一次至少14个ADC时钟周期 ,而ADC最高时钟周期为14MHz  选用采样 ...

  2. SQLServer 取小时

    select datepart(hh,getdate())--orselect datename(hh,getdate())

  3. 转:Zend_Cache的使用

    一.Zend_Cache快速浏览 Zend_Cache 提供了一个缓存任何数据的一般方法. 在Zend Framework中缓存由前端操作,同时通过后端适配器(File, Sqlite, Memcac ...

  4. MCU助推居家移动医疗微型化

    随着行动装置的快速普及,近几年行动医疗成为热门话题,市场成长迅速,也引发了不少新的商业模式.根据美通社一份市场调查报告指出,行动医疗市场在2018年将达到234.9亿美元的规模,2013至2018年期 ...

  5. grunt serve Fatal error: Port 35729 is already in use by another process.

    y@y:~$ lsof | grunt y 0t0 TCP *: (LISTEN) Optimizin y 0t0 TCP *: (LISTEN) v8:Sweepe y 0t0 TCP *: (LI ...

  6. Floyd 算法 打印路径模板

    #include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> ...

  7. Delphi 线程resume 不能调用Execute

    如果Resume不能唤起线程,请试试如下的函数,试试. GetExitCodeThread(ThreadHandle,ExitCode)来取得ExitCode,如果ExitCode=STILL_ACT ...

  8. 浅谈SQL Server中的快照

    原文地址:http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html 简介 数据库快照,正如其名称所示那样,是数据库在某一时间点的视 ...

  9. HTTP学习笔记2-请求结构

    8,HTTP请求 客户端通过发送HTTP请求向服务器请求对资源的访问. HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文. 9,HTTP请求-请求行 请求行以一个方法符号开头,后面跟着请求 ...

  10. File类学习笔记

    File类 首先,要明确的一点就是,在整个IO包中,唯一表示与文件有关的类局势File类. 它可以实现创建或删除文件等操作.下面看看它的构造方法: File(String pathname) 通过将给 ...