如何判断两个2D数组是否与每个元素完全匹配?它们具有相同的尺寸。
std::equal
似乎不起作用。
我试着写一个简单的函数
bool arrays_equal(int a[][], int b[][])
{
...
}
然后我需要两个数组的最后一个维度来传递一个二维数组。是否可以使用(sizeof(a[0])/sizeof(*(a[0])))
完成?
答案 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;
}
值M
和N
应该是您的数组维度,或者您可以将它们设置为函数模板参数。别忘了#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} }。