STL删除vector或list的方法及注意的问题
删除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的方法及注意的问题的更多相关文章
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
- C++STL之Vector向量详解,用法和例子 一起学习 一起加油
C++ STL之vector用法总结 1 ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- C++-STL:vector用法总结
目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...
- 转 STL之vector的使用
http://www.cnblogs.com/caoshenghe/archive/2010/01/31/1660399.html 第一部分 使用入门 vector可用于代替C中的数组,或者MFC中的 ...
- 【C++】STL,vector容器操作
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...
- STL之vector常用函数笔记
STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...
随机推荐
- jQuery plugin
SidebarJS http://makotot.github.io/sidebar/
- 由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考
背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的 ...
- Delphi 使用自定义消息
Delphi 使用自定义消息 1.先用Const 定义一个常量,例如 const WM_MyMessage=WM_USER+$200; 2.在要实现的unit中定义一个私有方法 procedure ...
- Python核心编程 练习
2–9.循环和运算符 创建一个包含五个固定数值的列表或元组,输出他们的平均值.本练习的难点之一是通过除法得到平均值. 你会发现整数除会截去小数,因此你必须使用浮点除以得到更精确的结果. float() ...
- 【转】HP(惠普)大中华区总裁孙振耀退休感言
一.关于工作与生活我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是很尴尬的.我见过的40岁附近的外企经理人大多在 ...
- ubuntu14.04.2 添加ppa remastersys源 镜像ubuntu系统
- O - Steady Cow Assignment - POJ 3189(多重匹配+枚举)
题意:有N头奶牛,M个牛棚,每个牛棚都有一个容量,并且每个牛对牛棚都有一个好感度,现在重新分配牛棚,并且使好感觉最大的和最小的差值最小. 分析:好感度貌似不多,看起来可以枚举一下的样子,先试一下把 注 ...
- QE是什么
量化宽松(Quantitative Easing,简称QE),是一种货币政策,主要指各国央行通过公开市场购买政府债券.银行金融资产等做法.量化宽松直接导致市场的货币供应量增加,可视为变相“印钞”.市场 ...
- JS验证手机号码
对于表单的验证是添加信息的时候必不可少的. 下面是基于EasyUI-validatebox拓展的对手机.座机号的验证方法. PhoneAndMobile: { validator: function ...
- SQL给查询结果加序号
情境:在用delphi7编程时,想要给查询出的结果一个编号,比方有一万条结果,就自己主动从1编号到10000 显示数据时用的是DBGrid控件,可是它的第一列无法非常好的显示编号,找了非常多方法都不能 ...