이것은 어려운 문제를 해결하는 것보다 배열의 사용법을 더 잘 이해하기위한 것입니다.비교 연산자로 배열 비교
현재 다른 정수 배열과 비교하고 싶은 정수 (네이버스)가 있습니다. 다른 배열에는 저장하지 않아도됩니다. 네 이웃 배열이 동일한 지 알고 싶습니다. 더 나은 모르는 사람으로, 내 첫 번째 시도는이 작업을 수행했다 : 당신이 볼 수 있듯이
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 루프를 거치지 않고 같은 배열을 비교하는 방법이 있는지 여부입니다
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-loop가 네 개의 값만 가질 때 특히 집중적이지는 않지만 두 개의 배열이 동일한 정보를 포함하는지 여부를 판별하는 것이 더 쉬울 것이라고 생각했습니다. 각 배열이 연속적인 메모리 블록이라면, 나는 그 두 개의 블록을보고 그것들이 똑같은지 (실제로는 for-loops가하는 일은 수동으로 수행해야 함) 체크 할 수있을 것이라고 생각했을 것이다.
배열의 내용을 직접 비교할 수 있습니다. 한 줄의 코드로 직접 비교하는 것이 좋습니다. 그렇지 않다면 왜 안 되겠습니까? 나는이 문제의 배후에있는 과학을 이해하고 싶다.
여기 팁 - 줄'Same = false; 다음에'break;'문을 추가 할 수 있습니다. 거짓이라면 조금 빨라질 것입니다. 왜 계속 검사를하는지 (unles 너 정말로하고 싶어?) – mathematician1975
사실입니다. 일반적으로 그렇게 하긴하지만, 작은 데이터 세트이기 때문에 이번에는 잊어 버렸습니다. 그래도 알리미 주셔서 감사합니다! – GarrickW