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

相關文章
相關標籤/搜索