• vector 中需要注意的东西!


             vector的erase方法注意点!!!

    C++11是这样的:

    iterator erase (const_iterator position);
    iterator erase (const_iterator first, const_iterator last);
    vector::erase():从指定容器删除指定位置的元素或某段范围内的元素
     
    如下:
    iterator erase(   iterator _Where);
    删除指定位置的元素,返回值是一个迭代器,指向删除元素的下一个元素;
     
    iterator erase(   iterator _First,   iterator _Last);
    删除从_First开始到_Lsat位置的元素,返回值也是一个迭代器,指向最后一个删除元素的下一个位置。
     
    调用erase()函数后,vector后面的元素会向前移位,形成新的容器,这样原来指向删除元素的迭代器(_Where)就失效了。
     
    所以下面的程序是错误的!
    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++) {
                if(* it == 0) {
                    arr.erase(it); //在erase后,it失效,it成了一个“野指针”。
                }
    }
     
    正确的使用方式是:
    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); ){
            if(* it == 0) {
                it = arr.erase(it);
            }
            else {
                ++it;
            }
    }

    remove or erase区别!!!

    STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除。若要真正移除,需要搭配使用erase()

    vector中的remove的作用是将等于value的元素放到vector的尾部,但并不减少vector的size

    vector中erase的作用是删除掉某个位置position或一段区域(begin, end)中的元素,减少其size

     

     
     
     
  • 相关阅读:
    1、vsCode插件开发流程入门
    node中MySQL的安装与使用
    sublime使用插件
    Node.js基础知识梳理
    第5章-11 字典合并 (40分)
    我的考研心得-zju-se
    解决 重启tomcat上传的文件被自动删除或未重启过段时间也自动删除(deloy path)
    org.hibernate.InstantiationException: No default constructor for entity
    UE.delEditor is not a function问题原因及解决方法
    javaweb开发过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/zhangkele/p/7628962.html
Copyright © 2020-2023  润新知