STL删除vector或list的方法及注意的问题
2013-07-26 18:01
441 查看
删除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/list)的安全删除方法
- vector iterators incompatible 删除map,list中元素时,应注意的问题
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- STL中用erase()方法遍历删除元素注意的问题
- 关于STL的list,vector等用迭代器iterator,用erase删除元素出现的问题。
- stl的vector,map,list删除元素
- List在删除对象时注意下标问题
- C++STL中对vector进行erase删除元素操作中遇到的问题。
- vector, list, map在遍历时删除符合条件的元素实现方法
- 关于vector删除某一些特定的值的使用方法和出错的问题详解.
- stl的list、set、map删除方法
- STL::vector两个值得注意的问题
- C++ STL容器的使用方法(vector、queue、list、set、map)
- C++/STL_利用remove_if 删除vector,list,deque满足条件的元素
- vector删除操作 erase方法注意事项
- python list列表删除元素需要注意的问题
- list.remove()时出问题,集合的remove方法注意事项
- STL之List用法注意问题
- STL中vector/list的几种赋值方法的速度比较