前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Effective STL(21) 永远让比较函数对相同元素返回false

Effective STL(21) 永远让比较函数对相同元素返回false

作者头像
程序员小王
发布2018-04-13 11:14:03
1.6K0
发布2018-04-13 11:14:03
举报
文章被收录于专栏:架构说架构说

问题描述:

昨天一哥们些的程序,在定义比较函数的时候是这样写的

代码语言:javascript
复制
bool cmp(const T& a, const T& b)
{
    if (a >= b)  
        return true;
   return false;
}

在内部测试时,一直表现挺好,也没挂。 但一到线上,立即就挂了,打印出vector内的元素也都是正确的, 但是core在了 STL:sort里面了, 而且指针明显也是错的了。

原因分析:

stl:sort 排序 如果数据过多 才会用快速排序

所有数据进行与中间值比较的时候是无边界保护的,

当我们的容器里面所有值都相等,而comp()函数对相等返回true的时候,在进行快速排序的时候,迭代器就会越界失效。‍

++first 可能越界

解决办法

代码语言:javascript
复制
bool cmp(const T& a, const T& b)
{
 if (a > b) 
        return true;
   return false;
}

effective stl 第21条:总是让比较函数在等值情况下返回false

扩展问题:

Q 在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,

你如何调试这个bug?

A: 参考 https://zhuanlan.zhihu.com/p/21348220

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档