STL删除vector或list的方法及注意的问题
来源:互联网 发布:手机如何开淘宝网店 编辑:程序博客网 时间:2024/05/16 09:32
删除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,map,list删除元素
- STL::vector两个值得注意的问题
- STL中用erase()方法遍历删除元素注意的问题
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- stl的list、set、map删除方法
- stl list(链表)的删除问题
- STL vector注意问题
- STL中vector值得注意的两个问题
- STL中vector值得注意的两个问题
- stl vector list的使用
- STL Vector 的遍历删除
- STL Vector 的遍历删除
- stl map vector的删除
- 使用std的vector,map,list, set等注意问题
- 关于STL容器中vector特定元素的删除问题
- STL vector,list,deque删除迭代器失效问题
- 求教flask框架的学习方法
- 关于android adb 进程占用的解决方法
- hdu 4619 Warm up 2
- Linux - CentOS5.5 JDK-6u32-linux-i586.bin 或者jdk-6u35-linux-i586.bin的安装
- Word Search
- STL删除vector或list的方法及注意的问题
- magento怎么修改货币符号,在之前加上国家缩写
- 2013 多校联合 2 A Balls Rearrangement (hdu 4611)
- 5.1 Chain of Responsibility职责链模式
- Jquery图片滚动插件—BxCarousel
- MySQL Connector/Python 安装、测试
- AGG札记 待续
- 部署图
- 推荐一个Root手机及刷机工具—刷机大师