当前位置: 首页 > news >正文

c++ STL容器.size()易造成的bug

在循环中如果使用STL容器.size()作为判断条件,一定要先转化为int类型,否则比较时可能因为算数转换而发生错误。

#a为vector
#易产生bug的写法
for(int i = 0; i<=a.size()-1; i++)
{...}#更健壮的写法
for(int i = 0; i<=int(a.size())-1; i++)
{...}

上述代码中,如果a为空,那么第一种写法会出现bug:无符号整数下溢,a.size()=0,减1后变为极大的正数,此时很可能会导致越界访问甚至缓冲区溢出的问题!而第二种写法可以避免。

实例:kmp算法bug

#kmp算法
#t: target字符串, p: pattern字符串, tindex pindex分别表示遍历位置	
while (tindex < t.size() && pindex < p.size())
{if (pindex == -1 || t[tindex] == p[pindex]){tindex++;pindex++;}elsepindex = next[pindex];
}

以上代码乍一看没有任何问题,但运行结果与实际不符。分析后发现pindex=-1,与p.size()比较时出错:算数转换后pindex变为极大的正数,直接退出循环

正确写法

size()先转换为int,再进行比较。

while (tindex < int(t.size()) && pindex < int(p.size()))
{if (pindex == -1 || t[tindex] == p[pindex]){tindex++;pindex++;}elsepindex = next[pindex];
}

http://www.dtcms.com/a/486460.html

相关文章:

  • 计算机组成原理01-定点数/浮点数的原/反/补码运算
  • 工控软件开发选择难?Electron、Qt、WPF 对比
  • 做网站一定需要icp么wordpress 头部菜单
  • 连云港专业网站制作互联网营销师培训方案
  • 网站 设计公司 温州wordpress新浪微博主题
  • Linux云计算基础篇(25)-DNS配置
  • 【007】墙绘产品交易平台
  • 【教学类-97-01】20251015拉布布涂色
  • 方法区与运行时常量池
  • 帮人网站开发维护违法WordPress加2Dli
  • 临清轴承网站建设企业官网wordpress主题
  • 三重变革:数字革命、地缘重构与生态危机
  • 人工智能|强化学习——基于人类反馈的强化学习(RLHF)深度解析
  • Python编程实战 · 基础入门篇 | Python能做什么
  • 【Web开发】从入门到精通,全面解析 Web 开发的过去、现在与未来
  • 系统重构过程以及具体方法
  • inline (optimizer hint)说明
  • 咖啡厅网站开发目标wordpress 文章结尾处
  • MiraiMind v1.1.49 | 来自日本的虚拟聊天软件,主打无敏感词,可以与知名动漫角色展开恋爱,需要特殊网络
  • Net Core如何获取枚举值的中文描述
  • 深度学习笔记:入门
  • 第六篇: `dmesg` `lspci` - 硬件层面的“黑匣子”与“雷达”
  • 青岛制作网站云南建设厅查证网站
  • 自己怎么做外贸英文网站大型电商网站开发成本
  • 论文理解 【LLM-回归】—— Decoding-based Regression
  • DeepSeek使用教程
  • 青龙 定时任务管理平台
  • csdn手机app应该增加导入word格式markdown格式,或者输入网址自动导入
  • K8s学习笔记(二十) 亲和性、污点、容忍、驱逐
  • 培训餐饮网站建设dede 分类信息网站 模板