Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-if语句简化_C++_If Statement - Fatal编程技术网

C++ C++;-if语句简化

C++ C++;-if语句简化,c++,if-statement,C++,If Statement,可能重复: 有没有一种方法可以这样写: if ((var1==var2) && (var2==var3) && (var3==var4) ...) 像这样的事情 if (var1==var2==var3==var4 ...) ?没有比这更清楚的方法了,不。例如,您可以在集合中插入值,并检查ifsize==1,但您现在要做的就是这样做。基本上,不 如果您有一个集合,而不仅仅是零星变量,则可以应用算法来检查它们是否都相等,即O(N)如果它们都确实

可能重复:

有没有一种方法可以这样写:

    if ((var1==var2) && (var2==var3) && (var3==var4) ...)
像这样的事情

    if (var1==var2==var3==var4 ...)

?没有比这更清楚的方法了,不。例如,您可以在
集合中插入值,并检查if
size==1
,但您现在要做的就是这样做。

基本上,不


如果您有一个集合,而不仅仅是零星变量,则可以应用算法来检查它们是否都相等,即
O(N)
如果它们都确实相等(正如您的长语句一样),并且在发现一个不相等时会立即中断。

在C++11中,您可以编写如下一组函数:

template<typename T>
bool all_equal(T const &)
{
    return true;
}

template<typename T, typename U, typename... Args>
bool all_equal(T const & a, U const & b, Args const&... c)
{
    return a==b && all_equal(b,c...);
}

int main()
{
    std::cout << all_equal(1,2,3) << '\n';
    std::cout << all_equal(1,1,1) << '\n';
}
模板
布尔全等(T常数&)
{
返回true;
}
模板
布尔全部相等(T常数和a、U常数和b、参数常数和c)
{
返回a==b&&all_equal(b,c…);
}
int main()
{

std::cout虽然您的回答“否”是正确的,但您的替代方案将是一个糟糕的实现,因为将所有元素插入一个集合将是O(N logn),并且在发现不相等的情况时不会立即中断。简短回答:是的,但这不是一个明智的选择idea@Nik布加利斯:是的,“有一种方法可以把那个东西写进像另一个东西一样的东西”@K-ballo:这样它就可以保持相同的语义?不太可能。当使用布尔类型时,你可以这样做:
if(!((int)(v1+v2+v3)%3)){cout如果每个
all_equal
都可以内联……这是变量模板的一个很酷的用法。