昨天一哥们些的程序,在定义比较函数的时候是这样写的
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
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
阅读(2222) | 评论(0) | 转发(0) |