zoukankan      html  css  js  c++  java
  • 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

     

     
     
     
  • 相关阅读:
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现哥德巴赫猜想
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Java实现 洛谷 P1487 陶陶摘苹果(升级版)
    Spring异步任务处理,@Async的配置和使用
    Spring Boot系列二 Spring @Async异步线程池用法总结
  • 原文地址:https://www.cnblogs.com/zhangkele/p/7628962.html
Copyright © 2011-2022 走看看