본문 바로가기
언어/C++

[C++ 기본 공부정리] 5-2. 배열(Array)-다차원(multidimensional arrays)

by 민-Zero 2019. 11. 21.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

다차원 배열은 2차원 이상의 배열을 뜻한다. 1차원 배열이 1개의 행을 가진 배열이라면 2차원 배열은 행과 열을 모두 가진 행렬이 되며 3차원 배열은 배열의 요소로 2차원 배열이 들어가게 되어 x,y,z축이 생긴다고 생각하면 편하다. 3차원 이상으로 가면 3차원 처럼 배열의 요소로 n차원 배열이 들어가게 된다.

(3차원 배열은 도형의 회전, 이동 등 3D그래픽에 사용된다.)

 

1. 2차원 배열

2차원 배열도 각 요소가 1차원 행렬을 가진다고 생각하면 된다 따라서 행렬과 같은 모양이 이라고 생각하면 편하다.

문법)

타입 배열명[행의 개수][열의 개수];

[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
[2][0] [2][1] [2][2]

int arr[3][3]; 이라고 선언할 경우 위와 같은 공간에 데이터가 저장된다고 생각하면 편하다. 물론 실제 메모리의 모양은 위와 다른 모습이다.

 

2. 초기화

1차원 배열과 마찬가지로 리스트를 통해 초기화 하면 [0][0] 부터 차례로 값이 저장되며 배열의 길이보다 작을 경우 나머지는 0으로 초기화 된다.

 

좀더 행렬의 모양을 직관적으로 알아볼 수 있게 각 행별로 리스트로 묶어 초기화 할 수 있다.

또한 마찬가지로 요소의 개수보다 부족하다면 0으로 초기화 된다.

 

자동으로 길이를 설정 하는 것 또한 가능한대 행의 갯수는 자동으로 설정해도 되지만 열의 수는 입력하지 않을 경우 에러가 발생한다.

 

2차원 배열의 행과 열의 개수를 계산 하는 방법이다.

열의 개수는 (2차원 배열의 행 1개의 크기)/(타입의 크기)로 구할수 있다.

행의 경우 (전체배열 크기)/(열의 개수) 를 통해 열 1개의 크기를 구하고 그 크기를 타입의 크기로 나누어 행의 개수를 구할 수 있다. 

 

3. 요소에 접근 방법

1차원의 경우에는 for문 1번으로 모든 요소에 접근 할 수 있었다. 하지만 2차원 배열의 경우 for문 한번으로는 행하나에 접근하거나 열 하나에만 접근 할 수 있다. 따라서 for문을 중첩하여 사용해야 모든 원소에 접근 할 수 있다.

반복문의 경우 조건이 참일 경우에 {}안의 코드가 반복된다. 따라서 처음 for문에서 i값을 확인 row의 값보다 작으므로 {}안의 코드를 실행한다. 그 실행 코드로 for문을 만나 조건식을 확인한다. 이때 i값은 첫번째 for문의 반복이 종료된 것이 아니므로 2번째 for문이 실행되는 동안 i값은 0으로 유지되고 j값만 조건식과 증감식에 의해 col의 수까지 증가 된후 종료된다. 그 뒤 endl을 만나 출력시 열을 바꾸고 다시 첫번쨰 조건식으로 돌아가 i값이 1로 변경된뒤 다시 2번째 for문을 실행 시킬경우 j는 이전 반복이 끝났을때 초기화 되어 있으므로 0부터 반복된다.

 

댓글