C++ 使用erase接口须要注意!!

原本我是不怎么关注过这个点的,可是今天的一道题把我给难住了,看过答案以后才知道就是由于我对于erase接口使用的不了解形成的,因此特地把这道题拿出来讲一下ios

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

#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的返回值上!spa

erase再删除当前位置内容后会返回下一个位置的迭代器,而后再加上循环自己自带的++操做符,整个循环过程一共就会跳过2个位置,因此形成了100 300 300 500的结果code

相关文章
相关标签/搜索