zoukankan      html  css  js  c++  java
  • vector erase

    vector::erase 从指定容器删除指定的元素

    两个重载:

    iterator erase (iterator position);
    删除指定位置position的元素,并返回删除元素的下一个元素的迭代器

    iterator erase (iterator first, iterator last);
    删除从first到last(不包过last)之间的元素 [first,last),并返回last位置迭代器


    遍历删除元素方法:
    1.

      

      vector<int>array;
      array.push_back(100);
      array.push_back(300);
      array.push_back(300);
      array.push_back(300);
      array.push_back(300);
      array.push_back(500);
      vector<int>::iterator itor;
      for (itor = array.begin(); itor != array.end(); itor++){
        if (*itor == 300) array.erase(itor);
      }
    
      for (itor = array.begin(); itor != array.end(); itor++)
      {
        cout << *itor << " ";
      }

    这种使用方法会内存错误,因为删除itor指定元素后,itor就编程野指针了,正确使用是itor重新赋值为erase返回值。

    2.

          vector<int>array;
      array.push_back(100);
      array.push_back(300);
      array.push_back(300);
      array.push_back(300);
      array.push_back(300);
      array.push_back(500);
      vector<int>::iterator itor;
      for (itor = array.begin(); itor != array.end(); itor++){
        if (*itor == 300)  itor=array.erase(itor);
      }
    
      for (itor = array.begin(); itor != array.end(); itor++)
      {
        cout << *itor << " ";
      }

    这个方式在删除连续元素会错误,结果发现是100 300 300 500,因为itor指向删除元素下一个元素后,itor++就跳过了删除元素的下一个元素。

    3.正确使用方式

        vector<int>array;
        array.push_back(100);
        array.push_back(300);
        array.push_back(300);
        array.push_back(300);
        array.push_back(300);
        array.push_back(500);
        vector<int>::iterator itor;
        for (itor = array.begin(); itor != array.end(); ){
            if (*itor == 300) itor=array.erase(itor);
            else itor++;
        }
        for (itor = array.begin(); itor != array.end(); itor++)
        {
            cout << *itor << " ";
        }


     
  • 相关阅读:
    内存分析工具MAT(Memory Analyzer Tool)从安装到使用
    java 技术分享
    FreeMarker三宗罪之优缺点
    100+经典Java面试题及答案解析
    java中使用SimpleDateFormat实现字符串和日期的相互转换
    SQLSERVER还原数据库失败:错误: 3154
    值不能为null.参数名: viewInfo,如何解决
    java中判断Object对象类型
    ajax图片上传(asp.net +jquery+ashx)
    ElasticSearch 入门介绍
  • 原文地址:https://www.cnblogs.com/dj0325/p/8491446.html
Copyright © 2011-2022 走看看