有效地将变量与多个值进行比较
在某些情况下,有必要同时将一个变量与多个选项进行比较。通常,开发人员会使用 OR 运算符;
理想的解决方案
理想情况下,我们寻求一种方便的方法来区分多个组,如以下代码所示:
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
C 11 解决方案使用std::initializer_list
在 C 11 中,可以使用 std::initializer_list 来实现所需的功能。通过定义 is_in 模板函数,我们可以有效地将变量与一组选项进行比较:
#include <algorithm> #include <initializer_list> template <typename T> bool is_in(const T& v, std::initializer_list<T> lst) { return std::find(std::begin(lst), std::end(lst), v) != std::end(lst); }
这使我们能够简洁地执行比较:
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17解决方案:更高效
C 17 引入了高度优化的解决方案,效果良好任何类型:
template<typename First, typename ... T> bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } // ... // s1, s2, s3, s4 are strings. if (is_in(s1, s2, s3, s4)) // ...
与 C 11 版本不同,即使对于字符串等复杂类型,该版本也能生成高效的代码。
以上是如何在 C 中有效地将变量与多个值进行比较?的详细内容。更多信息请关注PHP中文网其他相关文章!