C++ 使用erase接口需要注意!!
发布日期:2019-11-17 06:45   浏览次数:
154人阅读 2019-11-11 00:15:32

原本我是不怎样关注过这个点的,但是明天的一道题把我给难住了,看过答案之后才晓得就是由于我关于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的后果

« 上一篇:没有了
» 下一篇:没有了
  • 友情链接:
Copyright(C) 2007-2010 EntLib.com(上海闵行区浦江镇863软件孵化基地) - 企业级的电子商务系统 基于Microsoft .Net Framework / ASP.Net / C# / AJAX 平台构建的标准电子商务系统 All Rights Reserved (R)    沪ICP备08014628号