该compare
函数是一个函数,它接受两个参数a
,b
并返回一个描述其顺序的整数.如果a
小于b
,则结果为负整数.如果a
大于b
,则结果为正整数.否则,a
并且b
相等,结果为零.
此功能通常用于参数化标准库中的排序和搜索算法.
实现compare
字符功能非常简单; 你只需减去参数:
int compare_char(char a, char b)
{
return a - b;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为通常假设两个字符之间的差异适合整数.(请注意,此假设不适用于以下系统sizeof(char) == sizeof(int)
.)
这个技巧无法比较整数,因为两个整数之间的差异通常不适合整数.例如,INT_MAX - (-1) = INT_MIN
建议INT_MAX
小于-1
(技术上,溢出导致未定义的行为,但让我们假设模运算).
那么我们如何才能有效地为整数实现比较函数呢?这是我的第一次尝试:
int compare_int(int a, int b)
{
int temp;
int result;
__asm__ __volatile__ (
"cmp %3, %2 \n\t"
"mov $0, %1 \n\t"
"mov $1, %0 \n\t"
"cmovg %0, %1 …
Run Code Online (Sandbox Code Playgroud) switch语句大约需要30 case
秒,包括从0到30的被禁止的无符号整数.
我可以做以下事情:
class myType
{
FunctionEnum func;
string argv[123];
int someOtherValue;
};
// In another file:
myType current;
// Iterate through a vector containing lots of myTypes
// ... for ( i=0; i < myVecSize; i ++ )
switch ( current.func )
{
case 1:
//...
break;
// ........
case 30:
// blah
break;
}
Run Code Online (Sandbox Code Playgroud)
func
每次都要通过开关.关于切换的好处还在于我的代码比30个函数更有条理.
或者我可以这样做(不太确定):
class myType
{
myReturnType (*func)(int all, int of, int my, int args );
string argv[123];
int someOtherValue;
};
Run Code Online (Sandbox Code Playgroud)
我有30个不同的函数,在开始时,指向其中一个的指针被分配给myType. …
我正在构建一个小型解释器,所以我想测试ifs,switch和指向函数的速度有多快.如果使用其他19 ifs比使用20个情况的切换稍快一些,并且函数指针(20个函数指针的数组)比前两个慢得多...
我预计结果会完全相反,有人可以解释一下吗?