list在圆桌问题循环遍历弹出的两个问题

腾讯提前批笔试题-1-圆桌会议 腾讯提前批笔试题1–圆桌会议 题目描述:   有n个人围坐在一个圆桌周围进行一场圆桌会议。会议开始前从第s个人开始报数,数到第m的人就出列退出会议,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此重复直到所有人全部出列为止。现在希望你能够求出按退出会议次序得到的人员的序号序列。   输入描述:三个正整数n, s, m,均小于10000。   输出描述:退出会议次序序号,一行一个。 相... 阅读详情

在类似圆桌循环遍历,然后逐个弹出元素的问题上遇到了两个程序错误,

第一个是   list iterator dereferenable的问题

因为逐个删除元素的过程中,有两种写法让迭代器  it 重新指向list的下一个元素

list<int> q;

list<int> :: iterator it ;

1,it = q.erase(it),

 这里it 被删除后,it会自动指向下一个元素,然后重新赋给it;

2,q.erase(++it)  ;

 ++it 的道理很简单,即 it = it +1;++it 返回的值是没有加1的那个值,删除后,it将变成it+1这个值

那么,在圆桌问题删除元素的过程中,就有可能在list容器已经位空的的时候还在进行圆桌循环遍历,这个就是出现 list iterator dereferenable 问题的原因。解决的方法就是在删除元素的下一行多加一条判断语句  if(q.empty) break 我遇到问题的时候虽然也加了这条语句,但是,并没有加在删除代码的下一行,所以导致了程序错误;

第二个问题就是  list iterator incrememtable 

这个问题其实就是一个 迭代器指向失效的问题 

我上面的两种删除后it重新赋值的方法其实在个别问题上是存在一些缺陷的,

圆桌循环的关键语句是   if(it == q.end()) it = q.begin();  就是当it指向list容器最末尾的时候,在重新将it迭代器指向list容器的开头来达到一个圆桌循环的过程,那么 在循环过程中用到的  for循环,很多人都习惯的喜欢把 ++it 写在for循环的括号里

for( it = q.begin() ; ; ++it)  像这样,但是,这样的写法可能会出现一些问题,就是,当it = q.end() 是没有任何值得,是一个空值,如果把这个空值带进循环内执行,就会出现一些问题,那么最安全得写法就是把 ++it 单独放出来(代码的目的可以忽视)

if (num == cnt) {
	        	cout << *it << endl;
			num = 0;
			it = q.erase(it);
			if (q.empty()) break;  //删除元素后下一行开始判断是否位空,因为删除后 it就自动指向下一个了,所以不需要在而外的it++
			}
			else {
				++it;     //++it 单独拿出,下一行加上是否已经到list容器的底部
				if (it == q.end()) it = q.begin();
			}


 
报数问题 有10个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位。     看到这道题我首先想到的是用约瑟夫环来解决这道题,但是实在是很复杂,其实,是有简单的方法的,我们先来看一下: 可以看出,最后剩下的是3,就是开始位于第四个位置上的人。   这道题其实是不需要数据结构的,十个人可以写成长度为10的整形数组,首先给每个人编号,每... 阅读详情

相关推荐

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1273

循环删除list集合元素报错:java.lang.IndexOutOfBoundsException

循环删除list集合元素报错:java.lang.IndexOutOfBoundsException 平时代码会用到递归去处理list等集合,也会遍历删除list集合中我们不需要的元素,由于是删除元素会到底list的长度发生变化,就会导致报集合长度的异常:java.lang.IndexOutOfBoundsException 解决办法就算把list集合转成 Iterator 去处理,比如我要删除Pets集合里color是red的元素,可以向下面这样: public static List<Pets&g

u014010424的博客 1084

车联网ECU、TSP与TBOX通信流程

对比维度ECU(电子控制单元)BMS(电池管理系统)应用场景传统燃油车 + 新能源汽车仅限新能源汽车核心作用控制整车各系统运行管理动力电池安全与寿命车联网角色数据采集与传输的核心载体提供电池相关的核心数据。

tecoes的博客 1234

Java中循环删除list报错解决办法

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。 JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。 1、for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 这种

MAX_xiaowu的博客 3045

【NTN 卫星通信】Starlink 星链卫星有多大?详解尺寸与技术参数

SpaceX的星链项目正在重塑全球互联网连接,尤其是在服务不足的地区。但星链卫星的实际尺寸有多大?

weixin_43603524的博客 1万+

从SSTS到CTS:解码汽车电子架构中的需求与实现规范

本文深入解析汽车电子架构中SSTS(子系统功能规范)与CTS(零部件技术规范)的转换过程,揭示从抽象需求到物理实现的关键步骤。通过实际案例说明如何将SSTS的功能逻辑、接口定义和性能指标转化为具体的CTS实施方案,并分享多供应商协同与测试验证的最佳实践,帮助开发者高效完成汽车电子系统开发。

weixin_29201859的博客 500

圆桌报数问题(剑指offer-62)

1、题目描述 一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁? 如图:内环表示人排列的环,外环表示自杀顺序;上面N=41,M=3。 2、解题思路一:时间复杂度O(MN): 使用一个大小为N的bool数组来保存每个人是否被杀,然后一直循环遍历这个数组,直到所有人都被杀死。在...

蓬莱道人的博客 1302

Allegro17.4原理图-PCB双向联动技巧:从网表生成到同步高亮

本文深入解析了Cadence Allegro 17.4中原理图与PCB的深度双向联动技巧。核心在于通过精准的网表生成与管理、实时的跨窗口交互高亮与信号追踪,以及元件与封装的智能匹配更新,构建高效协同设计工作流。掌握这些技巧能显著提升高速、高密度电路设计的效率与准确性,实现从逻辑设计到物理实现的无缝衔接。

weixin_29178069的博客 359

约瑟夫环问题

描述了约瑟夫问题的两种解法。一种模拟过程,一种用数学方法推导。

KangRoger的专栏 6万+

基于CODESYS与EtherCAT的步进电机单轴控制实践

本文详细介绍了基于CODESYS平台与EtherCAT总线技术实现步进电机单轴控制的完整实践流程。从硬件选型、软件工程创建、EtherCAT主从站配置,到运动控制功能块编程与在线调试,手把手指导读者完成从零到一的搭建,并提供了常见问题的排坑指南,帮助自动化开发者快速掌握这一高效、灵活且成本可控的工业运动控制解决方案。

hh234的博客 491

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

圆桌问题 (List)

圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。 Input 多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(&lt...

永夜莫明的博客 599

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

计算机世界的32条黄金法则:一场通往数字宇宙的奇妙旅程

我们走完了32个原理的旅程。从最基本的二进制和布尔逻辑,到最抽象的图灵完备性;从硬件的晶体管和CPU,到软件的算法和操作系统;从单机内存到全球互联网;从静态数据到人工智能。这32个原理就像32块基石,它们支撑起了整个数字文明的大厦。当你再次拿起手机、打开电脑、浏览网页时,希望你能看到背后那精妙绝伦的工程与数学之美。计算机科学的核心精神是什么?我认为是"用有限的规则创造无限的可能"。只用0和1,就能表示文字、图像、音乐、视频;只用AND、OR、NOT,就能构建能下棋、能翻译、能驾驶汽车的智能系统;

junecauzhang的专栏 324

RH850从0搭建Autosar开发环境系列讲解 - 总目录

Davinci Autosar实战开发从0构建开发能力。OS,COM,DCM,BSWMM,ECUM,VLINK,XCP,MEMMAP等模块配置,带你熟悉运行的autosar代码,包括MICROSAR的启动运行,使用GreenHills生成运行的hex。

weixin_42412049的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDU 1214 圆桌会议 简单数学题

题意:        这道题的题意是说给你n个数顺时针围成一个圈,用最少的相邻交换的次数,将其转变成为逆时针的一个圈。我们从较小的例子进行考虑,当n为偶数的时候,我们将前n/2 = m个数顺序全反最少的交换次数为m*(m-1)/2,那么将n个数最小的交换次数便是m*(m-1)。而对于n为奇数的时候,我们首先将最大一个数转移到对应的逆时针的圈的交换次数为n/2,剩余的(n-1)个数同偶数的情况是相

Bright 1378

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

list iterator not dereferencable

zhuy

wangningningyc的专栏 4073

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C语言实现约瑟夫问题(圆桌报数问题)人数,间隔,起始位可调

这里实现了参与的数量,报数的间隔,从第几位开始报数。 #include"stdio.h" #include"conio.h" #include"string.h" #define N 100 //人数 #define LEN 10 //人名的字符数 void JosephProblem(char [][LEN+1],int k,int First); char name[N][LEN+1]; ...

qq_43605009的博客 1433

C++ 自定义迭代器

让我们在示例中看一个简单迭代器类型的定义。我们定义一个类模板,用来表示一段数值类型值,也可以生成指定范围的开始和结束迭代器。这个迭代器也是模板类型,两个模板都定义在同一个头文件 Numeric_Range.h 中。下面是 Numeric_Range&lt;T&gt; 模板的定义: template &lt;typename T&gt; class Numeric_Iterator; //...

JIWilliams 2976

java实现圆桌问题

圆桌问题 题目 圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。 #输入 多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767); 输出 对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母

Jacksonfan1的博客 1011

多人围成一圈报数问题!

题目(摘自谭浩强的C语言):有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人。     解法思路:首先不要将思维局限在一圈人,可以先将n个人看做一排,即作为一个数组,为这个数组的每一个元素(即人)编号,第0个人就编号1,以此类推。有了编号之后可以这样:让第一个人开始报数,到第三个人喊3的时候,将其编号重置为0,并且将喊的那个数

追 1万+

list iterator not decrementable

刚遇到这个“list iterator not decrementable”的问题,网上多数解决方案是这样的: 意思就是在#include "stdafx.h" 的下一行加上#define _HAS_ITERATOR_DEBUGGING 0  这样虽然能解决部分问题,但其实出现这个错误的根源在我们的代码之中,如这位仁兄所回答的一样: 意思就是,错误的根源在我们的代码中,因为C++标

zhouworld16的专栏 5708

约瑟夫环问题(圆桌问题)最快算法

问题来源 约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在kill了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。 大致题意 在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。 按照如下规则去清除人

黄佳俊的博客 2151
上一篇: 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
下一篇: 【模拟链表】Joseph
Y390d
博客等级 码龄9年 11粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值