我正在尝试编写一个程序,使用for循环检查数组中的所有值是否相等但我无法找出if语句的方法来检查数组中的每个值是否相等而不是不断重复"if a[i] == a[1] && a[i] == a[0]"
等等。我不想这样做,因为我希望它适用于任何大小的任何数组。非常感谢任何帮助!
for (unsigned i = 0; i < val; i++){
if (a[i] == a[0])
return true;
else
return false;
}
答案 0 :(得分:8)
for (unsigned i = 0; i < val; i++) {
if (a[i] != a[0]) {
return false;
}
}
return true;
应该这样做。
在这种情况下,代码将立即在不匹配的值上失败。但是,在匹配值上,它只是继续检查(因为我们知道我们需要测试数组的每个元素,无论如何)。一旦完成,它就知道一切顺利(因为我们没有提前返回)并返回true。
答案 1 :(得分:1)
只是为了好玩,使用lambda表达式
#include <algorithm>
using namespace std;
template<size_t N>
bool func(int (&arr)[N])
{
int* pOddValue = std::find_if(begin(arr), end(arr),
[&] (int val){ return val != arr[0];});
return pOddValue != end(arr);
}
答案 2 :(得分:0)
使用分而治之的方法,如果n = 2 ^ k,我们可以减少与n-1的比较:
bool divide(int arr[],int size)
{
if( size == 2 ) return arr[0] == arr[1];
if( divide(arr,size/2) && divide(arr+size/2,size/2) )
return arr[0] == arr[size/2];
return false;
}
另一种类似的方法:
for (unsigned i = 1; i < val; i++) {
if (a[i] != a[i-1]) {
return false;
}
}
return true;
答案 3 :(得分:0)
#include <algorithm>
#include <vector>
#include <iostream>
int main(int argc, char** argv)
{
std::vector<int> eq{ 1, 1, 1, 1 };
std::vector<int> nq{ 1, 2, 1, 1 };
bool eq_res = std::all_of(std::begin(eq), std::end(eq),
[&eq](int c) -> bool
{
return eq[0] == c;
});
bool nq_res = std::all_of(std::begin(nq), std::end(nq),
[&nq](int c) -> bool
{
return nq[0] == c;
});
std::cout << "eq: " << eq_res << std::endl;
std::cout << "nq: " << nq_res << std::endl;
}
编译 g ++ --std = c ++ 11 main.cpp
答案 4 :(得分:0)
似乎你不需要处理val = 0。 你可以在一行中完成。
#include <functional>
#include <algorithm>
using namespace std;
return all_of(
a+1, a+val,
bind(equal_to<remove_pointer<decltype(a)>::type>(), a[0], placeholders::_1));