Computer Science/자료구조

다차원 배열(Multi-Dimensional Array)

림 림 2020. 5. 16. 16:16
반응형

#논리적으로는 다차원, 물리적으로는 일차원

다차원 배열은 2차원 이상의 배열을 가리킨다.
다차원 배열은 논리적으로는 다차원이지만 물리적으로는 메모리에 일차원 상으로 표현된다.

 

#다차원 배열을 메모리 상에서 표현하는 방법

다차원 배열을 표현하는 방법에는 행 우선 순서(row-major order)와 열 우선 순서(column-major order)가 있다.

[1] 행 우선 순서(Row-Major Order)

배열 원소의 가장 오른쪽 차원의 인덱스가 먼저 증가되고 상한 경계(upper bound)에 도달하면 바로 왼쪽 차원의 인덱스가 1씩 증가하는 순서로 메모리에 저장된다.

그림 1. 행 우선 순서

 

[2] 열 우선 순서(Column-Major Order)

배열 원소의 가장 왼쪽 차원의 인덱스가 먼저 증가되고 상한 경계(upper bound)에 도달하면 바로 오른쪽 차원의 인덱스가 1씩 증가하는 순서로 메모리에 저장된다.

그림 2. 열 우선 순서

 

 

#C++에서의 다차원 배열 저장 순서

C++에서는 다차원 배열을 행 우선 순서로 저장함을 알 수 있다.

int형 2차원 배열 arr[4][3]을 선언하고, 행 우선 순서로 원소들의 주소값을 출력해보았다.

#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
    int arr[4][3];
    
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            cout << "&arr[" << i << "][" << j << "]: " << &arr[i][j] << '\n';
        }
    }
    
    return 0;
}
&arr[0][0]: 0x7ffeefbff570
&arr[0][1]: 0x7ffeefbff574
&arr[0][2]: 0x7ffeefbff578
&arr[1][0]: 0x7ffeefbff57c
&arr[1][1]: 0x7ffeefbff580
&arr[1][2]: 0x7ffeefbff584
&arr[2][0]: 0x7ffeefbff588
&arr[2][1]: 0x7ffeefbff58c
&arr[2][2]: 0x7ffeefbff590
&arr[3][0]: 0x7ffeefbff594
&arr[3][1]: 0x7ffeefbff598
&arr[3][2]: 0x7ffeefbff59c

행 우선 순서로 주소값이 4씩 증가됨을 알 수 있다.

다차원 배열로 저장된 데이터에 접근을 할 때는 메모리에 저장되어 있는 연속적인 순서대로 접근을 하는 것이 편리하며, 성능 면에서도 효율적이다.

따라서 C++로 프로그래밍을 할 때 다차원 배열 자료구조를 사용하게 된다면, 배열에 순서대로 접근을 할 때 행 우선 순서로 접근하는 것이 좋을 것이다.

반응형

'Computer Science > 자료구조' 카테고리의 다른 글

배열 (Array)  (0) 2020.05.16