容器 段错误-C++容器问题。老是出现段错误。

问题描述

C++容器问题。老是出现段错误。

#include
using namespace std;
#include
int main(void)
{
list Boy;
for(int i = 1; i <= 100; ++i)
{
Boy.push_back(i);
}
list::iterator it = Boy.begin();
int num = 1;
while(Boy.size() > 1)
{
if(num%3 == 0)
{
Boy.remove(*it);
}
else
{
++it;
}
if(it == Boy.end())
{
it = Boy.begin();
}
++num;
}
cout << *it << endl;
return 0;
}

解决方案

你应该yerase删除,同时删除后要调整迭代器,不然会失效。

解决方案二:

removeeraseinsertpush_backpop_back等一系列会修改容器中元素个数的操作都会造成迭代器(iterator)失效,建议你换一种方法,常用的办法是把对象拷贝一份,像下面这种:

#include <iostream>
#include <list>
using namespace std;

int main(void)
{
    list<int> Boy;

    for(int i = 1; i <= 100; ++i)
    {
        Boy.push_back(i);
    }

    int num = 1;

    while(Boy.size() > 1)
    {
        list<int> tmpBoy;

        list<int>::iterator it = Boy.begin();
        for (; it != Boy.end(); it++)
        {
            if(num++ % 3 == 0)
            {
                continue;
            }

            tmpBoy.push_back(*it);
        }

        Boy = tmpBoy;
    }

    cout << *Boy.begin() << endl;
    return 0;
}

按照你的代码逻辑改的,应该输出的是你想要的结果。

P.S.:好像是N年前在oj上刷过的水题。

时间: 2024-12-30 22:26:47

容器 段错误-C++容器问题。老是出现段错误。的相关文章

容器监控—阿里云&amp;容器内部服务监控

目前Docker的使用越来越离不开对容器的监控,阿里云最近上线了容器服务,不但提供了核心的容器和宿主机监控能力,而且支持集成 Cloud Insight 监控,下面会介绍如何集成. 首先介绍一下阿里云的容器监控.阿里云容器服务在用户创建集群的时候就默认开启了几个容器服务,其中就包括一个容器监控服务,其监控大概就是使用这个服务来采集数据的. 容器监控的对象就是各个正在跑的容器本身的运行状况,而如果你想要监控在容器里面运行的服务的状况呢?这时候Cloud Insight 就可以帮到你了. 那么我们先

开放容器计划能否改善容器安全性?

最近Docker和CoreOS联手打造一个新的Linux基金项目叫做开放容器计划(Open Container Project).何谓开放容器计划?他如何改善软件容器的安全性? Dan Sullivan:开放容器计划,也被称为开放容器倡议,意在创建一个标准的容器显像模式和运行引擎.该项目由Linux基金会组织并赞助.尽管Docker已经有一个成形的标准了,Linux软件商CoreOS的相应的叫做rkt的标准与Docker不同,将容器行业分裂开来. 很难想象在软件堆栈这个关键层面上有如此区分的软件

开放容器计划能否改善容器安全性?

最近Docker和CoreOS联手打造一个新的Linux基金项目叫做开放容器计划(Open Container Project).何谓开放容器计划?他如何改善软件容器的安全性? Dan Sullivan:开放容器计划,也被称为开放容器倡议,意在创建一个标准的容器显像模式和运行引擎.该项目由Linux基金会组织并赞助.尽管Docker已经有一个成形的标准了,Linux软件商CoreOS的相应的叫做rkt的标准与Docker不同,将容器行业分裂开来. 很难想象在软件堆栈这个关键层面上有如此区分的软件

sql-安装SQL server 2008 时老是出现以下错误,该怎么办呢?

问题描述 安装SQL server 2008 时老是出现以下错误,该怎么办呢? 解决方案 看下是不是.net 4.0没有安装好,系统是不是山寨盗版精简过的.建议使用原版. 解决方案二: 系统环境估计不干净,造成安装失败.或者老的sql server没有卸载干净. 解决方案三: 卸载干净后,重新安装,环境搭建有问题

c++ 编程问题-列出能被3整除的100到200的数,老是提示一个错误,求专业指导谢谢啦!!!

问题描述 列出能被3整除的100到200的数,老是提示一个错误,求专业指导谢谢啦!!! #include ""stdafx.h"" int main(){int c;for(c=1;c<=200;c++)c=c*3if(c>=200)continueprintf(""%d""c);} 解决方案 首先,你的错误应该就是continue错了, 他是放在一个循环里面的.你的for循环应该这样写:for(c=1;c ...

gdi+-c# winform 运行一段时间就发生 GDI+ 中发生一般性错误

问题描述 c# winform 运行一段时间就发生 GDI+ 中发生一般性错误 代码中用paintcircle 画了一个圆 返回bitmap图片 赋值给鼠标 运行没有问题,到了大概50~70秒时就出问题 解决方案 在tempb.dispose后面加上tempb=null; 解决方案二: GDI+ 中发生一般性错误 C#c# GDI+发生一般性错误详解GDI+ 中发生一般性错误

eclipse-Eclipse老是说语法错误,编译器坑爹了?

问题描述 Eclipse老是说语法错误,编译器坑爹了? Button button = (Button) this.findViewById(R.id.button1); button.setOnClickListener(new ButtonClickListener()); private final class ButtonClickListener implements View.OnClickListener{ public void onClick(View v) { } } 描述

sun-glassfish v3 prelude ,访问4848管理平台时老是弹出错误信息

问题描述 glassfish v3 prelude ,访问4848管理平台时老是弹出错误信息 消息: 无法获取属性"getElementsByTagName"的值: 对象为 null 或未定义 行: 803 字符: 6 代码: 0 URI: http://127.0.0.1:4848/resource/com_sun_faces_ajax.js 是怎么回事呢? 解决方案 https://blogs.oracle.com/theaquarium_zh/entry/glassfish_v3

指针-这段代码中的插入函数编译没有错误,运行就崩溃?其它函数都经过编译了没有错误?不知道是什么问题?

问题描述 这段代码中的插入函数编译没有错误,运行就崩溃?其它函数都经过编译了没有错误?不知道是什么问题? #include #include #include typedef struct POINT { int row; int col; struct POINT *next; }POINT; void initPointLink(POINT **pointLinkHeadPointer); void showPoints(POINT *pointLinkHead); void showOne