這只是一個小問題,更多的目的在於理解數組的用法,而不是解決難題。將數組與比較運算符進行比較
我目前有一個四個整數(鄰居)的數組,我想比較一組其他數組(其他地方不存在 - 我不需要存儲它們)。我想知道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