c++中sort函数调用报错Expression : invalid operator <的内部原理
来源:互联网 发布:网络覆盖公司 编辑:程序博客网 时间:2024/05/19 10:35
当我们调用sort函数进行排序时,中的比较函数如果写成如下
bool cmp(const int &a, const int &b){ if(a!=b)return a<b; else return true;}
则在待排序列中如果出现相等元素,则会报错Expression : invalid operator <
原因是,c++编译器检测到调用cmp的参数a==b时,c++编译器会立即用反序参数调用cmp函数,即调用cmp(b,a),来判断cmp函数是否已经执行了严格的弱序规则(a与b相等则位置不被改变)
注意:两次cmp函数的调用后,都会调用内部的严格弱序规则检测函数(源码如下)
template<class _Pr, class _Ty1, class _Ty2> inlinebool _Debug_lt_pred(_Pr _Pred,_Ty1& _Left, _Ty2& _Right,_Dbfile_t _File, _Dbline_t _Line){// test if _Pred(_Left, _Right) and _Pred is strict weak orderingif (!_Pred(_Left, _Right))return (false);else if (_Pred(_Right, _Left))_DEBUG_ERROR2("invalid operator<", _File, _Line);return (true);}
两次上述检测函数的调用,都会因为_Pre函数(即cmp函数)返回true而调用_DEBUG_ERROR2函数。但是_DEBUG_ERROR2有一个特点:只在第二次被迭代调用时输出错误信息。所以,当第二次反序调用cmp时(即cmp(b,a)),程序会报错:Expression : invalid operator <。
综上所述,cmp函数的改进写法如下
bool cmp(const int &a, const int &b){ if(a!=b)return a<b; else return false;}better version:
bool cmp(const int &a, const int &b){ return a<b; }
0 0
- c++中sort函数调用报错Expression : invalid operator <的内部原理
- [C++] Expression : invalid operator < 解决方法
- [C++] Expression : invalid operator < 解决方法
- [C++] Expression : invalid operator < 解决方法
- Expression:invalid operator<断言
- Expression : invalid operator < 解决方法
- Expression : invalid operator <
- Expression : invalid operator < 解决方法
- 错误expression: invalid operator<
- Expression:invalid operator <
- 自定义std::sort的比较函数时发生"invalid operator<"错误原因
- c语言中函数调用的原理
- c语言中函数调用的原理
- sort里遇到 invalid operator <
- sort : invalid operator < on VS2008
- javascript中sort()函数的原理
- 调用STL的sort,出错提示invalid <
- STL-sort invalid operator< 异常处理(转载)
- Java泛型-类型擦除
- cocos2d-x编译安卓版本时实现“再按一次退出程序”的效果
- 你的Android应用完全不需要那么多的权限
- java反射教程(最全)
- 额围观围观
- c++中sort函数调用报错Expression : invalid operator <的内部原理
- matlab中遇到了GLIBCXX_3.4.15 not found 的问题
- C#学习笔记1
- Announcing a preview of F# 4.0 and the Visual F# Tools in VS 2015
- jQuery插件之ajaxFileUpload
- Linux常用操作命令
- http://write.blog.csdn.net/postlist
- ios开发 日期时间指南
- android 开源组件合集-UI篇(2014-08-25更新)