【STL中的erase()方法 】

来源:互联网 发布:果核源码 编辑:程序博客网 时间:2024/06/05 22:48

 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在STL中用earse()方法删除一个元素很简单,基本上也不会出什么错,但是在遍历删除某条件下的元素时就有可能会弄错了。在list、set、map、vector和deque遍历删除某条件元素时通用的一种方法可以这样使用:

 std::list< int> List;   // 这里也可以是set、map、vector和deque    std::list< int>::iterator iter = List.begin();    while( iter != List.end() )    {          if( /* 是否删除的条件判断 */ )          {             iter = List.erase( iter );          }          else             iter ++;    }


通过erase方法的返回值来获取下一个元素的位置。
对于list、map等节点形式的容器有人会用另一种方式:

while( iter != List.end() )    {          if( /* 是否删除的条件判断 */ )          {             List.erase( iter++ );          }          else             iter ++;    }


而有些人往往会误用为:

while( iter != List.end() )    {          if( /* 是否删除的条件判断 */ )          {             List.erase( ++iter );          }          else             iter ++;    }


在这里“++”运算符是被重载过的,与我们平常的理解刚好相反,erase( iter++) 是先获取下一个元素的位置再删除; erase( ++iter) 是删除以后再获取下一个元素的位置。
    为了不混淆“++”运算符,建议使用前面的通过erase方法的返回值来获取下一个元素的位置的方式来做遍历删除某些元素,这样所有的STL容器还基本上可以共用,记起来也方便呢,呵...

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳公司集体户口离职后怎么办 济南本地户口不符合入学条件怎么办 上海住亲戚家怎么办居住证 政府卖非农户口怎么办 90年代买了户口怎么办 上海应届大学生积分不够怎么办 广州居住证回执单丢了怎么办 惠阳居住证回执单丢了怎么办 南京居住证换地方了怎么办 买家退回的商品有问题怎么办 农转农户口手续怎么办 原房东不迁户口我怎么办 户主信息页掉了怎么办 户主变了户口本首页怎么办 大人户口迁走小孩户口怎么办 网银转账处理中怎么办 教育部学籍在线验证报告有错怎么办 验证码连续输入三次错误怎么办 交通运输监察大队截车了怎么办 平安安康续保没成功怎么办 危险品经营许可证到期了怎么办 郑万350渝万怎么办 厂里饭堂的饭好难吃怎么办 学校的食堂饭菜不好不卫生怎么办 亲戚借钱我真没有怎么办 榴莲肉酸了吃了怎么办 亲戚赖在家里住怎么办 食堂饭菜味道差该怎么办 被监视居住公安打电话睡着了怎么办 鱼缺氧浮上水面怎么办 车载低音炮有电流声怎么办 925纯银变黑了怎么办 银子放久了变黑怎么办 高铁票网上售空怎么办 高铁票出票失败怎么办 高铁票名字打错怎么办 高铁票姓名错了怎么办 高铁票弄丢了怎么办 用过的车票丢了怎么办 高铁票被水洗了怎么办 沈阳地铁卡丢了怎么办