list删除元素
来源:互联网 发布:如何用手机注册淘宝号 编辑:程序博客网 时间:2024/04/30 10:16
常用的删除容器中元素的方法是如下(方法1):
有一种错误的写法(注意同方法2比较)
我们看一下erase()函数的源代码(仅列出release下的代码)。
函数在返回的时候,是返回当前迭代器的下一个节点。所以当 iter = List.erase( iter ); 执行以后,迭代器自动指向了下一个元素。而对于入参中的iter,所指的地址已经被销毁,所以写的时候,应该注意加上前面的iter =
那另外的一种写法,List.erase( iter++ ); 为什么也是对的呢?
list< int> List; list< int>::iterator iter; for( iter = List.begin(); iter != List.end(); ) { if(1) { iter = List.erase( iter ); } else { iter++; } }
也可以这样写(方法2): list< int> List; list< int>::iterator iter; for( iter = List.begin(); iter != List.end(); ) { if(1) { List.erase( iter++ ); } else { iter++; } }
有一种错误的写法(注意同方法2比较)
list< int> List; list< int>::iterator iter; for( iter = List.begin(); iter != List.end(); ) { if(1) { List.erase( iter ); } iter++; }
我们看一下erase()函数的源代码(仅列出release下的代码)。
iterator erase(iterator _Where) { // erase element at _Where _Nodeptr _Pnode = (_Where++)._Mynode(); if (_Pnode != _Myhead) { // not list head, safe to erase _Nextnode(_Prevnode(_Pnode)) = _Nextnode(_Pnode); _Prevnode(_Nextnode(_Pnode)) = _Prevnode(_Pnode); this->_Alnod.destroy(_Pnode); this->_Alnod.deallocate(_Pnode, 1); --_Mysize; } return (_Where); }
函数在返回的时候,是返回当前迭代器的下一个节点。所以当 iter = List.erase( iter ); 执行以后,迭代器自动指向了下一个元素。而对于入参中的iter,所指的地址已经被销毁,所以写的时候,应该注意加上前面的iter =
那另外的一种写法,List.erase( iter++ ); 为什么也是对的呢?
_Myt_iter& operator++() { // preincrement ++(*(_Mybase_iter *)this); return (*this); } _Myt_iter operator++(int) { // postincrement _Myt_iter _Tmp = *this; ++*this; return (_Tmp); }
0 0
- List 删除指定元素
- list删除元素
- STL删除list元素
- List集合删除元素
- list删除元素
- List删除重复元素
- list删除元素问题
- list列表删除元素
- python删除list元素
- Python List 删除元素
- 从list删除元素
- 删除list中元素
- 遍历List,删除元素
- List删除元素
- list删除元素
- 删除List中的元素
- List删除元素()
- 删除List中指定元素
- 黑马程序员_入门第一天
- 小光 ~! 博客拿来
- oracle 查看用户所在的表空间
- MySql事务无法回滚的原因
- 腾讯2014春季笔试题:double数的解析
- list删除元素
- 揭秘生姜价格贵过猪肉的背后
- emwin,动起来,小小计算器
- ubuntu下配置rsync服务
- cydia添加源程序 v1.1.6 中文版
- 打印机驱动安装一则
- PowerDeisnger16下导出到sqlserver2005以上出现sysproperties错误的解决办法
- Android init进程启动
- 公钥和私钥