1、VS2008 stack overflow
测试递归程序,当递归次数很大时,超过了VS2008默认的栈空间大小,导致了stack overflow
解决方法:这里仅仅为了测试程序,所以只改变编译器的设置
项目-属性-配置属性-链接器-系统-设置栈堆保留大小和栈堆提交大小(单位为字节,设置一个比较大的数即可)
2. switch括号中的表达式的值的限制
switch括号中的表达式的值限制是4个字节,比int大的不行,只能是整形、字符型或者是枚举型表达式,即只能是byte, char, short, int或者是相应的枚举类型。
3. 在自定义Sort函数中的比较函数时,出现 Debug Assertion Failed! 和 Expression: invalid operator<的问题.
错误的例子
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int nFirst,int nSec)
{
if (nFirst <= nSec)//区别
{
return true;
}
return false;
}
int main()
{
int nArr[2] = {3,3};
sort(nArr,nArr + 2,cmp);
system("pause");
return 1;
}
正确的例子
bool cmp(int nFirst,int nSec)
{
if (nFirst < nSec)//区别
{
return true;
}
return false;
}
原因:在自定义sort的Cmp函数时,要求Cmp函数必须是
strict weak ordering
。其英文解释为A Strict Weak Ordering is a Binary Predicate that compares two objects, returning true if the first precedes the second。
也就是说,只有当第一个参数在第二个参数前的时候才返回真,其他均为假。注意,在两个参数相等时,必须返回假。这里易出错。需注意。