检查在c++中是否所有变量都等于相同的值
Check to see if all variable are equal to the same value in c++
比较多个变量以查看它们是否都是相同值的最简单方法是什么?例如,如果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)的结果进行比较。
所以我们不会使用链'=='运算符进行多变量比较。
它不起作用,因为==
比较运算符返回true
或false
(即1
或0
)。为了避免两两比较,我想最好的方法是使用循环:
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";
相关文章:
- c++类声明时,相同的例程,不同的成员变量类型
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 测试适用于成员变量的成员函数
- 适用于会员变量的新位置
- 如何将概念应用于成员变量
- 类中具有相同变量名的多重继承
- 与外部循环具有相同变量名称的内部循环
- c++ 具有相同变量名的多个父项
- 在 c++ 中确定具有相同变量名的成员的 setter 的行为
- C++ 奇怪的情况,例如将现有变量应用于新变量
- c++ 引用相同变量的多个函数
- C++两个库依赖于相同的库,但版本不同
- 如何将不同的实例化应用于相同的对象名称
- C++对对象的向量进行迭代,并将STL算法应用于成员变量
- std::atomic是否阻止非原子变量相对于原子变量的重新排序
- 使用依赖于类的类型和函数,在类的所有实例中具有相同值的c++变量
- gcc是否会优化对相同变量的重复函数调用,并为每次调用提供相同的输出?
- 如何将低级const应用于模板变量.我试图写一个const_cast实现
- 相对于静态变量为常量的静态成员函数