检查两个二维阵列是否相等

Check if two 2D arrays are equal

本文关键字:是否 阵列 二维 两个 检查      更新时间:2023-10-16

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

std::equal似乎不起作用。

我试着写一个简单的函数

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

但是我需要两个数组的最后一个维度来通过二维数组。会使用(sizeof(a[0])/sizeof(*(a[0])))来完成吗?

也许是这样?

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>

假设您知道每个数组的确切大小,并且它们在编译时是已知的,那么比较只是具有正确大小的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将不起作用,因为它是一个编译时运算符,这意味着您必须传递维度或考虑使用stl