在完成C++ Primer Plus(第五版)的习题5.17时发生的bug,困扰好一会。通过网上寻找解决办法,还是懵懂,翻回原书终于找到原因。其实也就是学的还是不够扎实,忽略很多细节。
题目要求:编写一段程序,检测两个vector<int>对象是否有一个是另一个的前缀。
编写的函数:
int main5_17()
{int temp;vector<int> ivec1={ 0,1, 1, 2 }, ivec2 = { 0, 1, 1, 2, 3, 5, 8 };if (ivec1 < ivec2){auto it1 = ivec1.cbegin(), it2 = ivec2.cbegin();for (; it1 != ivec1.cend() || *it1 != *it2; it1++, it2++){;}if (it1 == ivec1.cend()){cout << "ivec1是ivec2的前缀" << endl;return 0;}}else if (ivec1 > ivec2){auto it1 = ivec1.cbegin(), it2 = ivec2.cbegin();for (; it2 != ivec2.cend() || *it1 != *it2; it1++, it2++){;}if (it2 == ivec2.cend()){cout << "ivec2是ivec1的前缀" << endl;return 0;}}cout << "没有前缀的对象存在" << endl;return 0;
}

Bug:

can't dereference out of range vector iterator
Debug:测试时发现在执行到for循环时出错,刚开始debug时以为是递增部分出的问题,迭代器后移之后条件语句解引用出错,但尝试之后发现并不是递增。其实也不应该第一个考虑到递增而应该时解引用部分。条件语句本意是判断短的对象迭代是否到尾后元素,或者当两个解引用得到的元素不相等时就退出,但是实际编写的逻辑和思考的逻辑并没有一致(被第二个(!=)和第一个判断,常用的(!=)干扰到了逻辑运算)按照思考的逻辑,应该修改成:
it2 != ivec2.cend() || *it1 != *it2
或者应该考虑到第一个常用的不等于比较运算符,中间的逻辑运算符改成(&&):
it2 != ivec2.cend() && *it1 != *it2
而翻回原书4.3的逻辑和关系运算符一节,短路求值时:
**对于逻辑与运算符,当且仅当左侧运算对象为真时才对右侧运算对象求值
**对于逻辑或运算符,当且仅当左侧运算对象为假时才对右侧运算对象求值
在印象中把逻辑或的求值搞混了,使用或的时候,迭代器递增到尾后元素时,`it1 != Ivec1.cend()`为假,于是对右侧运算对象求值,此时(*it1)显然已经超出vector对象的范围,非法访问了。

Debug_C++:关于逻辑或在合法性检测中的问题相关推荐

  1. VAE逻辑整理及VAE在异常检测中的小实验(附代码)

    VAE逻辑整理及VAE在异常检测中的小实验(附代码) Variance和control variate 两种常见的分类器 相应代码 Minst数据集的训练和重构 KDD99数据  本文主要讲解一下整个 ...

  2. 机器视觉检测中的图像预处理方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文以Dalsa sherlock软件为例,一起来了解一下视觉检测 ...

  3. 本地资源检测,特效检测中Overdraw相关问题

    1)本地资源检测,特效检测中Overdraw相关问题 ​2)Android上如何加速判定Bundle文件是否存在 3)xLua pcall异常捕获 4)Mipmap和带宽 5)Timeline卡顿严重 ...

  4. SLAM笔记(七)回环检测中的词袋BOW

    1.词频 (摘自阮一峰博客,参见附录参考) 如果某个词很重要,它应该在这篇文章中多次出现.于是,我们进行"词频"(Term Frequency,缩写为TF)统计.考虑到文章有长短之 ...

  5. 欺诈检测中的不平衡分类

    文章目录 介绍 为什么模型可解释性很重要? 有哪些方法? 倾斜的数据分布 平衡数据分布 平衡算法 评估指标 Precision-Recall 权衡在欺诈检测中的意义 关于权衡的结论 使用不平衡数据集进 ...

  6. 行业丨工业检测中的机器视觉应用情况

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自 | 新机器视觉 本文介绍了机器视觉在工业领域的发展历程,通 ...

  7. pcb成型板aoi检测_AOI在PCB检测中的应用

    描述 印制电路板(简称PCB)是组装电子零件用的基板,PCB板的制造品质直接影响电子产品的可靠性.随着电子组装向更高密度.更小尺寸的PCB混合技术的纵深发展,为减少进入下步工序的缺陷电路板的数量,对P ...

  8. 关于实时检测中的多线程并发处理

    在实时检测中为了能够更高效地利用CPU性能,常需要使用到多线程并发处理,但由于实时检测中每一帧都在刷新内存,而多线程编程最大的难点就在于容易造成内存冲突,所以本文章将介绍以下关于如何实现在实时检测中多 ...

  9. 目标检测中特征融合技术(YOLO v4)(下)

    目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...

最新文章

  1. 05定制后台和修改模型
  2. python数据结构树和二叉树,python数据结构树和二叉树简介
  3. 维基百科---似然函数
  4. 在大规模 Kubernetes 集群上实现高 SLO 的方法
  5. 鸿蒙系统2019发布会,直击丨2019华为开发者大会 “鸿蒙”系统今日正式发布!...
  6. wordpress插入腾讯视频的方法
  7. thinkphp mysql 中文 问号_thinkphp分页中文参数乱码解决
  8. eclipse java不能编译_eclipse里.java可以编译但不能运行??
  9. HTML5有哪些表单新特性
  10. 特殊人物请遵循公司工作的基本准则
  11. netcore之hello
  12. 第六、七章重点知识点总结
  13. 网站漏洞渗透检测过程与修复方案
  14. WPF 入门教程 TextBox详解
  15. MPS的DCDC国产代换件
  16. 数字地与模拟地解释及PBC底线布局
  17. 一文了解驱动程序及更新方法
  18. Push master to origin/master was rejected by remote
  19. 2018年1月西邻雪山自驾游攻略
  20. 干货 | 教你打造一款颜值逆天的VS Code

热门文章

  1. 好人冯鑫:曾拒绝马云20亿,公司市值直逼400亿!
  2. 大数据实时处理半期总结报告
  3. EMU,ARC 、NeoGeo CD 、GB/GBC 、MD 、SFC 、GG/SMS 、GBA 、PS 、PCE 模拟器移植方案
  4. c语言常用库函数使用要点,C语言常用库函数使用要点.doc
  5. si4463突破最大包64字节发送
  6. Proteus8.9 VSM Studio GCC编译器仿真STM32F407ZGT6系列011_lcd1602_并口
  7. [excel]如果去掉科学计数法,以及将正常的减号进行计算
  8. 西门子s7-1200plc通过 458modbus通讯控制5台变频器
  9. Python实现 宽度/广度优先搜索算法, 深度优先搜索算法
  10. 国内头部游戏本地化服务商 安睿杰本地化翻译