STL删除元素要注意的地方
来源:互联网 发布:ubuntu进不去登录界面 编辑:程序博客网 时间:2024/05/20 08:01
删除STL容器的元素时会导致迭代器失效,
(关联容器和顺序容器的erase方法的返回值是不同的,关联容器一般没有返回值;顺序容器有返回值,它返回的是下一个元素的迭代器)
现在 下面的这个操作你看出问题了吗?
.//删除其中的奇数
for(vector<int>::iterator ite = v3.begin(); ite != v3.end(); ++ite)
{
if(*ite%2)
{
v3.erase(ite);
}
}
另外大家要注意:
erase( itList++) 是先获取下一个元素的位置再删除; erase( ++itList) 是删除以后再获取下一个元素的位置。
所以正确的写法应该是这样的,当然还有其他的写法,呵呵。。。
for(vector<int>::iterator ite = v3.begin(); ite != v3.end();)
{
if(*ite%2)
{
ite = v3.erase();
}
else
{
ite++;
}
}
/但是map的使用不能像上面那样,原因上面已经解释了,所以map的写法如下:
for(map::iterator ite = v3.begin(); ite != v3.end();)
{
if(*ite%2)
{
v3.erase(ite++);
}
else
{
ite++;
}
}
- STL删除元素要注意的地方
- 对stl的set中元素进行删除时需注意的地方
- 对stl的set中元素进行删除时需注意的地方
- STL算法之remove要注意的地方。以及迭代时如何正确的删除迭代器
- STL中用erase()方法遍历删除元素注意的问题
- 对C++ STL,list元素的循环删除操作 //断链,出错地方
- STL容器元素的删除
- 【学习笔记】《STL使用入门教程》第六讲:容器使用时机、算法、删除元素的注意点
- C++使用STL中map需要注意的地方
- DispactchAction要注意的地方!
- UITableViewController 要注意的地方
- UITextField要注意 的地方
- textFiled要注意的地方
- splitViewController要注意的地方
- 线程要注意的地方
- 面试要注意的地方
- PAT要注意的地方
- Toast要注意的地方
- 如何在MFC程序中使用Open Inventor
- 函数返回 局部变量问题
- 开篇 Toolmaker
- 关于java构造方法的几点
- c#学习笔记——7
- STL删除元素要注意的地方
- linux core 文件的产生及gdb调试
- oiv7.0 --配置
- 函数返回局部变量问题
- 实习第4天
- 类加载器的委托机制学习笔记
- 新手上路第一天————菜鸟的心得之双向循环链表
- 不错的内网管理软件
- (function($){...})(jQuery)是什么意思