码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-11-11 09:48:02      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:ace   就是   end   c++   begin   操作符   今天   std   space   

本来我是不怎么关注过这个点的,但是今天的一道题把我给难住了,看过答案之后才知道就是因为我对于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的结果

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

标签:ace   就是   end   c++   begin   操作符   今天   std   space   

原文地址:https://blog.51cto.com/14232799/2449322

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!