Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523320
  • 博文数量: 80
  • 博客积分: 1496
  • 博客等级: 上尉
  • 技术积分: 1292
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:24
个人简介

IT码农一个~

文章分类

全部博文(80)

文章存档

2020年(3)

2019年(7)

2017年(1)

2016年(2)

2015年(2)

2014年(26)

2013年(26)

2012年(2)

2011年(1)

2010年(1)

2008年(9)

我的朋友

分类: LINUX

2013-09-18 16:48:40

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

bool cmp(const T& a, const T& b)
{
    if (a >= b)  
        return true;
   return false;
}

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

上网查了些资料,终于找到了问题的所在。
一切全是 相等时 return true 造成的。

在内部测试时,玩家数量很少,小于16,所以sort用的是插入排序不会出错。
而到线上运行,玩家数量超过16了,sort调了 快速排序,并且由于里面有相等
的元素,导致了 迭代器继续前行,而失效。

具体分析,详见下面参考文献。我就不班门弄斧了。


小小 sort, 深不可测。
大家在使用STL的时候,还是多查文档,明确用法,
任何一种api都是有自己的使用范围的。

不然不仅不会得到提升,反而掉入陷阱。


参考文献:

使用std::sort()排序导致程序core问题分析 


http://blog.sina.com.cn/s/blog_79d599dc01012m7l.html

STL sort源码剖析

http://www.cnblogs.com/imAkaka/articles/2407877.html

stl排序之sort函数
http://blog.csdn.net/hzyong_c/article/details/7791415

详细解说 STL 排序(Sort)

http://www.cppblog.com/mzty/archive/2005/12/15/1770.html
阅读(2160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~