c – 使用超过50个OR(||)优化if语句

c – 使用超过50个OR(||)优化if语句,第1张

概述好的,所以我正在做一些涉及键盘输入的东西.我现在有一个像这样的巨大功能: return key == BB_KEY_SPACE || key == BB_KEY_ZERO || key == BB_KEY_ONE || key == BB_KEY_TWO || key == BB_KEY_THREE || key == 好的,所以我正在做一些涉及键盘输入的东西.我现在有一个像这样的巨大功能:

return key == BB_KEY_SPACE ||        key == BB_KEY_ZERO ||        key == BB_KEY_ONE ||        key == BB_KEY_TWO ||        key == BB_KEY_THREE ||        key == BB_KEY_FOUR ||        key == BB_KEY_FIVE ||        key == BB_KEY_SIX ||        key == BB_KEY_SEVEN ||        key == BB_KEY_EIGHT ||        key == BB_KEY_NINE ||        key == BB_KEY_A ||        key == BB_KEY_B ||        key == BB_KEY_C ||        key == BB_KEY_D ||        key == BB_KEY_E ||        key == BB_KEY_F ||        key == BB_KEY_G ||        key == BB_KEY_H ||        key == BB_KEY_I ||        key == BB_KEY_J ||        key == BB_KEY_K ||        key == BB_KEY_L ||        key == BB_KEY_M ||        key == BB_KEY_N ||        key == BB_KEY_O ||        key == BB_KEY_P ||        key == BB_KEY_Q ||        key == BB_KEY_R ||        key == BB_KEY_S ||        key == BB_KEY_T ||        key == BB_KEY_U ||        key == BB_KEY_V ||        key == BB_KEY_W ||        key == BB_KEY_X ||        key == BB_KEY_Y ||        key == BB_KEY_Z ||        key == BB_KEY_NUMPAD0 ||        key == BB_KEY_NUMPAD1 ||        key == BB_KEY_NUMPAD2 ||        key == BB_KEY_NUMPAD3 ||        key == BB_KEY_NUMPAD4 ||        key == BB_KEY_NUMPAD5 ||        key == BB_KEY_NUMPAD6 ||        key == BB_KEY_NUMPAD7 ||        key == BB_KEY_NUMPAD8 ||        key == BB_KEY_NUMPAD9 ||        key == BB_KEY_MulTIPLY ||        key == BB_KEY_PLUS ||        key == BB_KEY_SEPERATOR ||        key == BB_KEY_MINUS ||        key == BB_KEY_DECIMAL ||        key == BB_KEY_divIDE ||        key == BB_KEY_OEM1 ||        key == BB_KEY_OEMPLUS ||        key == BB_KEY_OEMCOMMA ||        key == BB_KEY_OemmINUS ||        key == BB_KEY_OEMPERIOD ||        key == BB_KEY_OEM2 ||        key == BB_KEY_OEM3 ||        key == BB_KEY_OEM4 ||        key == BB_KEY_OEM5 ||        key == BB_KEY_OEM6 ||        key == BB_KEY_OEM7 ||        key == BB_KEY_OEM8 ||        key == BB_KEY_OEM102;`

有没有一种优化方法?我假设它需要一些处理能力来验证所有这些if语句的东西.在查看诊断时,似乎也需要花费一些时间.我想知道是否有更聪明的方法来做这件事.

解决方法 利用从key是char类型的注释中收集的附加信息,key有256个可能的值. key的每个可能值的返回值可以存储到由key索引的全局数组中,并通过简单地返回数组的key’th元素来检索.

char arr[256] = { 0 };arr[BB_KEY_SPACE] = 1;arr[BB_KEY_ZERO] = 1;/* ... */arr[BB_KEY_OEM102] = 1;bool f(char key){    return arr[(unsigned)key] != 0; /* == 1 for the BB_KEY_* values */}

[编辑]正如@galik在评论中最初建议的那样,通过使用std :: vector< bool>可以保存一些内存(以可忽略的速度惩罚). ARR(256);而不是char数组.

[编辑#2]正如下面的@Hurkyl和@Danh评论的那样,假设arr是一个已知的固定大小的数组,std :: bitset可以(应该?)代替std :: vector< bool>.

虽然这是完全正确的,但它们之间的选择长期以来一直是讨论和争论的主题.搜索SO和/或谷歌搜索std :: bitset vs std :: vector< bool>会发现双方的一些意见.

总结

以上是内存溢出为你收集整理的c – 使用超过50个OR(||)优化if语句全部内容,希望文章能够帮你解决c – 使用超过50个OR(||)优化if语句所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1224046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存