C ++如何检查数组中的元素是否相等?

时间:2015-09-04 06:02:14

标签: c++ loops for-loop

我正在尝试编写一个程序,使用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;
    }

5 个答案:

答案 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));