c++:通过单个函数调用替换多个索引相等性测试

标签 c++

在 c++/c++11 中,替换形式的多重比较的正确方法是什么:

if(isIndexToFind==index1 || isIndexToFind==index2 ...)

用一些不那么凌乱的形式:

if(isIn(indexToFind,index1,index2,...))

对于不同数量的参数 index1、index2... 此代码属于数值型,因此我希望有一些与直接比较几乎一样高效的东西。

添加 index1、index2 是常量静态值可能很有趣,因此基于可变参数模板的解决方案可能会很有趣?

最佳答案

你可以这样写

#include <iostream>
#include <algorithm>
#include <initializer_list>

template <class T>
bool one_of( const T &value, std::initializer_list<T> lst )
{
    return std::any_of( lst.begin(), lst.end(), [&]( const T &x ) { return value == x; } );
}    

int main()
{
    std::cout << one_of( 1, { 2, 3, 1, 5 } ) << std::endl;
    std::cout << one_of( 4, { 2, 3, 1, 5 } ) << std::endl;
}    

关于c++:通过单个函数调用替换多个索引相等性测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701831/

相关文章:

c++ - 我如何获得无限小的数字(对于分形)

c++ - 错误:'class std::result_of 中没有名为 ‘type’ 的类型

C++,防止在堆栈上创建类实例(在编译期间)

c++ - z 顺序曲线中的下一次迭代

C++:未定义对命名空间中函数的引用

c++ - 什么是 "Argument-Dependent Lookup"(又名 ADL,或 "Koenig Lookup")?

c++ - 如何在 OpenGL 中绘制多边形,这些多边形具有用黑色钢笔绘制的轮廓和另一种填充颜色

c++ - 在 C++ 中使用智能卡在 Mac 上签名数据

c++ - std::array 的类型特征

c++ - CRTP 和多级继承