这只是一个小问题,更多的目的在于理解数组的用法,而不是解决难题。将数组与比较运算符进行比较
我目前有一个四个整数(邻居)的数组,我想比较一组其他数组(其他地方不存在 - 我不需要存储它们)。我想知道Neighbors四个数组中的哪一个相同。正如有人谁不知道任何好转,我第一次尝试这样做:
if (Neighbors == {1, 1, 0, 0})
{
//code...
}
else if (Neighbors == {0, 1, 1, 0})
{
//code...
}
else if (Neighbors == {0, 0, 1, 1})
{
//code...
}
else if (Neighbors == {1, 0, 0, 1})
{
//code...
}
正如你所看到的,整数的顺序是非常重要的。但是,上述返回的编译器错误预期在大括号标记之前的主表达式。
所以不是,我尝试这样做:
int Sets[4][4] = { {1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 1} };
if (Neighbors == Sets[0])
{
//code...
}
else if (Neighbors == Sets[1])
{
//code...
}
else if (Neighbors == Sets[2])
{
//code...
}
else if (Neighbors == Sets[3])
{
//code...
}
这里发生的是,即使Neighbors = {0, 1, 1, 0}
(例如),Neighbors == Sets[1]
返回false。
现在,在做了这些以及想知道为什么之后,我记得数组变量基本上是指向序列中第一个元素的指针。对?所以我想我得到为什么上面的代码不起作用 - 我比较两个内存地址,而不是两个数组。所以不是我写了这个代码,它工作正常:
for (int ii = 0; ii < 4; ++ii)
{
bool Same = true;
for (int jj = 0; jj < 4; ++jj)
{
if (Neighbors[jj] != Set[ii][jj])
{
Same = false;
}
}
if (Same == true)
{
//code...
}
}
我想知道的是是否有一个比较像这样的阵列,而不通过两个去for循环的方式。这看起来应该比这更简单。我知道当你只有4个值时,for循环并不是特别密集的,但我仍然认为确定两个数组是否包含相同的信息会更容易。如果每个数组都是连续的内存块,我会认为你可以看看这两个块并检查它们是否相同(这基本上是for循环的工作内容,尽管这需要手动完成)。
那么有没有办法直接比较数组的内容,最好是用一行代码?如果不是,为什么不呢?我想了解这个问题背后的科学。
刚这里有一个提示 - 你可以在你的行后面添加一个'break;'语句'Same = false;'这会加速一点,因为一旦你知道它是错误的,为什么继续检查(unles你真的想要)? – mathematician1975
这是真的 - 我通常这样做,但我这一次忘了,因为它是如此小的一组数据。谢谢你的提醒! – GarrickW