检查在c++中是否所有变量都等于相同的值

Check to see if all variable are equal to the same value in c++

本文关键字:于相同 变量 c++ 是否 检查      更新时间:2023-10-16

比较多个变量以查看它们是否都是相同值的最简单方法是什么?例如,如果var1 = 53我想检查var2或var3是否等于var1和彼此?到目前为止,我已经这样做了:

if(row1==row2==row3==row4==col1==col2==col3==col4==diag1==diag2)
    cout << "It is a magic square";
else
    cout << "Not a magic square";

然而,这似乎不起作用。谢谢你的帮助。

在c++ 11中,您可以使用可变模板来定义自己的函数:

#include <iostream>
template<typename T, typename U>
bool all_equal(T&& t, U&& u)
{
    return (t == u);
}
template<typename T, typename U, typename... Ts>
bool all_equal(T&& t, U&& u, Ts&&... args)
{
    return (t == u) && all_equal(u, std::forward<Ts>(args)...);
}
int main()
{
    int x = 42;
    int y = 42
    std::cout << all_equal(42, y, x);
}

你不能像那样链接==操作符。你需要写,例如

if (row1==row2 && row2==row3 && row3==row4 && ...)

我希望下面的信息将给出一个关于链'=='操作符如何工作的想法:

由于C语言不支持像a==b== C这样的链式比较;每个等于操作符(==)只能操作两个操作数。那么表达式a==b==c如何计算?

根据运算符等于运算符(==)的结合律从左向右操作,即等于运算符(==)的结合律是从左向右的

表达式a==b==c实际上是(a==b) ==c,看看表达式(a==b) ==c如何计算?

•(a==b)将首先进行比较,并返回1 (true)或0 (false)。

•将变量c的值与(a==b)的结果进行比较。

所以我们不会使用链'=='运算符进行多变量比较。

它不起作用,因为==比较运算符返回truefalse(即10)。为了避免两两比较,我想最好的方法是使用循环:

int vals[] = {row1,row2,row3,row4,col1,col2,col3,col4,diag1,diag2};
bool equals = true;
for (int i = 0; i < sizeof(vals); ++i) {
  if (vals[i] != vals[i+1]) {
    equals = false;
    break;
  }
}

我想它甚至可以用逐位循环:

int val = vals[0];
for (int i = 1; i < sizeof(vals); ++i)
  val &= vals[i];
bool equals = val == vals[0];

不带if的解决方案

#include <iostream>
bool equals(int val1, int val2, int val3, int val4)
{
    return((val1 | val2 | val3 | val4) == (val1 & val2 & val3 & val4));
}
int main()
{
  std::cout << "1, 1, 1, 1 -> " << (equals(1, 1, 1, 1)?"true":"false") << std::endl;
  std::cout << "0, 0, 0, 0 -> " << (equals(0, 0, 0, 0)?"true":"false") << std::endl;
  std::cout << "0, 0, 1, 1 -> " << (equals(0, 0, 1, 1)?"true":"false") << std::endl;
  std::cout << "3, 3, 1, 1 -> " << (equals(3, 3, 1, 1)?"true":"false") << std::endl;
  std::cout << "-5, -5, -5, -5 -> " << (equals(-5, -5, -5, -5)?"true":"false") << std::endl;
  return(0);
}

你需要使用&&操作符,尽管这会增加需要输入的代码量。如果你正在比较矩阵的值,我建议使用循环和索引来比较值,而不是将它们分配给变量并测试是否相等。

if(row1==row2 && row2==row3 && row3==row4 && row4==col1 && col1==col2 && col2==col3 &&   col3==col4 && col4==diag1 && diag1==diag2)
    cout << "It is a magic square";
else
    cout << "Not a magic square";