原本我是不怎麼關注過這個點的,可是今天的一道題把我給難住了,看過答案以後才知道就是由於我對於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