gpt4 book ai didi

c++ - 检查元素是否在 std::initializer_list 中

转载 作者:可可西里 更新时间:2023-11-01 15:10:22 33 4
gpt4 key购买 nike

我希望能够用 C++ 编写类似于以下 Python 代码的内容:

if x in [1, 2, 3, 5] ...

测试一个元素是否包含在一组硬编码值中,就地定义。像这样:

if (in(x, {1, 2, 3, 5})) ...

下面是 in 函数的可能实现:

template<class T>
bool in(const T& x, std::initializer_list<T> c)
{
return std::find(c.begin(), c.end(), x) != c.end();
}

我的问题是:我真的必须自己编写这个函数吗?那里有任何默认实现吗?也许在 boost ?我检查了 boost::contains,但它只适用于字符串。

最佳答案

如果您有权访问 你可以使用 set contains 返回 bool允许你做:

if(set{ 4, 8, 15, 16, 23, 42 }.contains(x))

Live Example


否则,仅使用 你仍然可以使用 set count 它只返回 1 或 0 允许你做这样的事情:

if(set<int>{ 4, 8, 15, 16, 23, 42 }.count(x) > 0U)

Live Example


请记住,神奇的数字可能会让您的观众感到困惑(并导致 5 季的迷失。)
我建议将您的号码声明为 const initializer_list<int>并给他们一个有意义的名字:

const auto finalCandidates{ 4, 8, 15, 16, 23, 42 };

if(cend(finalCandidates) != find(cbegin(finalCandidates), cend(finalCandidates), x))

关于c++ - 检查元素是否在 std::initializer_list 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492217/

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