gpt4 book ai didi

c++ - 将变量与多个值进行比较的最有效方法?

转载 作者:IT老高 更新时间:2023-10-28 23:22:16 24 4
gpt4 key购买 nike

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

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

我搞砸了“或”,但似乎没有什么是正确的。我试过了

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

但它什么也没做。

我想方便地区分几个组。例如

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

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

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

最佳答案

这是 C++11 中的一种方式,使用 std::initializer_list:

#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 }

虽然不与内置类型一起使用时效率不是很高。 int 可以正常工作,但是如果你比较 std::string 变量,例如,生成的代码很糟糕。

然而,在 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++ - 将变量与多个值进行比较的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com