有效比较一个变量与多个值
在编程中,经常需要检查一个变量是否与多个选项之一匹配。这可以通过多种方法来实现,但优先考虑效率至关重要。
效率低下的方法
尝试使用 OR 等逻辑运算符将变量与多个值进行比较可能会导致低效的代码。例如:
if (num == (1 || 2 || 3))
此方法分别计算每个逻辑表达式 (1 || 2, 2 || 3),这可能会导致处理浪费。
以下方面的高效解决方案C 11
C 11 中的一个有效解决方案涉及利用 std::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) || ...); }
此模板函数使用完美转发来有效地评估每个比较,从而生成与手写比较相同的代码。
以上是如何在 C 中有效地将变量与多个值进行比较?的详细内容。更多信息请关注PHP中文网其他相关文章!