C ++比较变量和多个值的最有效方法?

在程序中几次,我不得不检查变量是否是许多选项之一。例如


if (num = (<1 or 2 or 3>)) { DO STUFF }

我已经把“ OR”弄乱了,但是似乎没有什么是对的。我试过了


if (num == (1 || 2 || 3))

但它什么也没做。请帮忙!提前致谢。


PS我需要区分几个组。例如...


if (num = (1,2,3))


else if (num = (4,5,6))


else if (num = (7,8,9))


慕村225694
浏览 654回答 3
3回答

鸿蒙传说

如果要检查的值足够小,则可以为要查找的值创建一个位掩码,然后检查要设置的位。假设您关心几个小组。static const unsigned values_group_1 = (1 << 1) | (1 << 2) | (1 << 3);static const unsigned values_group_2 = (1 << 4) | (1 << 5) | (1 << 6);static const unsigned values_group_3 = (1 << 7) | (1 << 8) | (1 << 9);&nbsp; &nbsp;&nbsp;if ((1 << value_to_check) & values_group_1) {&nbsp; // You found a match for group 1}if ((1 << value_to_check) & values_group_2) {&nbsp; // You found a match for group 2}if ((1 << value_to_check) & values_group_3) {&nbsp; // You found a match for group 3}这种方法最适合于不超过CPU喜欢使用的自然大小的值。在现代通常为64,但是可能会因环境的不同而有所不同。

素胚勾勒不出你

这是C ++ 11中的一种使用方法std::initializer_list:#include <algorithm>#include <initializer_list>template <typename T>bool is_in(const T& v, std::initializer_list<T> lst){&nbsp; &nbsp; return std::find(std::begin(lst), std::end(lst), v) != std::end(lst);}这样,您可以执行以下操作:if (is_in(num, {1, 2, 3})) { DO STUFF }但是,当不与内置类型一起使用时,效率不是很高。int可以正常工作,但是std::string例如,如果您比较变量,则生成的代码简直糟透了。但是,在C ++ 17中,您可以改用效率更高的解决方案,该解决方案适用于任何类型:template<typename First, typename ... T>bool is_in(First &&first, T && ... t){&nbsp; &nbsp; return ((first == t) || ...);}// ...// s1, s2, s3, s4 are strings.if (is_in(s1, s2, s3, s4)) // ...在C ++ 11版本将是非常低效的位置,而这个版本应该产生相同的代码手写比较。
打开App,查看更多内容
随时随地看视频慕课网APP