zoukankan      html  css  js  c++  java
  • C++ 使用erase接口需要注意!!

    本来我是不怎么关注过这个点的,但是今天的一道题把我给难住了,看过答案之后才知道就是因为我对于erase接口使用的不了解造成的,所以特意把这道题拿出来说一下

    题目要求是给出以下代码的输出结果:

    #include<iostream>
    #include<vector>
    using namespace std;
    int main(){
        vector<int> a;
        a.push_back(100);
        a.push_back(300);
        a.push_back(300);
        a.push_back(300);
        a.push_back(300);
        a.push_back(500);
        auto it = a.begin();
        for (; it != a.end(); it++){
            if (*it == 300){
                it = a.erase(it);
            }
        }
        for (it = a.begin(); it != a.end(); it++){
            cout << *it << ' ';
        }
        return 0;
    }

    第一遍看过去的时候以为正确答案是 100 500
    结果答案却是100 300 300 500
    这让我百思不得其解,最后发现问题出现在erase的返回值上!

    erase再删除当前位置内容后会返回下一个位置的迭代器,然后再加上循环本身自带的++操作符,整个循环过程一共就会跳过2个位置,所以造成了100 300 300 500的结果

  • 相关阅读:
    第一周。。。
    新人日报1129
    Daily Report-1126
    How to read source code[repost]
    Markdown tutorial [repost]
    蘑菇街面经
    阿里面经
    百度凤巢一二面经
    Mybatis最入门---代码自动生成(generatorConfig.xml配置)
    Maven的生命周期阶段
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13756233.html
Copyright © 2011-2022 走看看