c++ - 有没有比使用 "if"更快/更短的方式在 C++ 中进行这些测试?

标签 c++ if-statement

...
int x;

int z1 = '-';
int z2 = '-';
int z3 = '-';
int z4 = 'a';

if ((z1 == 'a' || z1 == 'b')) x++;
 else if ((z1 == '-' && z2 == 'a' || z2 == 'b')) x++;
  else if ((z1 == '-' && z2 == '-' && z3 == 'a' || z3 == 'b')) x++;
   else if ((z1 == '-' && z2 == '-' && z3 == '-' && z4 == 'a' || z4 == 'b')) x++;
 else x = 0;

printf("x=%d\n",x);
...

我的代码比这长得多,我想知道是否有更短的方法来获得相同的结果,或者程序执行它的速度更快! 在此先感谢您的帮助和关注!

最佳答案

为了使代码更短(并且更具可读性、可扩展性和全面性更好),将 z 变量放在一个数组中,然后对其进行循环。对于您想要的任意数量的 z 变量,下面的解决方案将保持相同的行数。只需调整数组的大小即可。

int z[4];

for (int i = 0; i < 4; i++)
{
    if (z[i] != '-')
    {
        x += (z[i] == 'a' || z[i] == 'b'); // note the implicit conversion from boolean to int
        break;
    }
}

请注意,您仍然需要考虑到最后一个索引是 - 并且 x 永远不会递增或设置为 0,但这可以做一个简单的修改。我建议将以上内容放入它自己的评估函数中,这样你就可以简单地捕获所有 return

注意:您可能应该为您的变量使用 char 数据类型,因为您专门在其中存储字符。

就速度而言,此解决方案可能与您当前的解决方案相当(如果不是更好的话)。它的分支次数与您的 if-else 语句一样多,但在运行时可能会有更好的分支预测(感谢 for-loop)并且评估更少表达式。

关于c++ - 有没有比使用 "if"更快/更短的方式在 C++ 中进行这些测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718537/

相关文章:

ios - 在 alertView if 语句中调用 IBaction

javascript - 如何将div的旋转信息获取到js中的变量中

c++ - 可变参数模板中的 Lambda

JavaScript - 获取满足第一个条件的值

c++ - 如何在 UnrealEngine 中对非 2 的幂纹理进行下采样?

c++ - 将 QDialog 窗口限制为一个实例 [Qt]?

java - 我该如何做出这个 if 语句?

mysql - 选择过去的时间和过去的日期 MySQL - 使用 if

c++ - C++ 中 int 和 char 的重载运算符

c++ - 从正在运行的程序中读取值