• 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的结果

  • 相关阅读:
    第九周
    第七周.
    第六周.
    第二次作业
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    统计一行文本的单词个数
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13756233.html
Copyright © 2020-2023  润新知