检查两个2D阵列是否相等

时间:2014-09-27 23:53:17

标签: c++ arrays equality

如何判断两个2D数组是否与每个元素完全匹配?它们具有相同的尺寸。

std::equal似乎不起作用。

我试着写一个简单的函数

bool arrays_equal(int a[][], int b[][])
{
...
}

然后我需要两个数组的最后一个维度来传递一个二维数组。是否可以使用(sizeof(a[0])/sizeof(*(a[0])))完成?

2 个答案:

答案 0 :(得分:2)

也许是这样的?

bool arrays_equal(std::array<std::array<int, M>, N> const & lhs,
                  std::array<std::array<int, M>, N> const & rhs)
{
    return lhs == rhs;
}

MN应该是您的数组维度,或者您可以将它们设置为函数模板参数。别忘了#include <array>

答案 1 :(得分:1)

假设您知道每个数组的确切大小并且它们在编译时是已知的,那么比较只是memcmp()并且具有正确的大小。

// you somehow know the size of the array
int a[WIDTH][HEIGHT];
int b[WIDTH][HEIGHT];

bool const equal(memcmp(a, b, sizeof(int) * WIDTH * HEIGHT) == 0);

// and if defined in the same scope, you can even use:
bool const equal(memcmp(a, b, sizeof(a)) == 0);

请注意,我的代码假设两个数组(a和b)具有相同的大小。您可以先测试一下,使用throw或者一个断言,例如std :: assert(sizeof(a)== sizeof(b))。

如果您不知道编译时的大小sizeof将不起作用,因为它是编译时运算符,这意味着您必须传递维度或考虑使用{{1} }。