原本我是不怎么关注过这个点的,可是今天的一道题把我给难住了,看过答案以后才知道就是由于我对于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