C++에서는 템플릿(template)과 재귀 호출을 활용하면 다차원 배열의 각 차원 크기를 간단하게 확인할 수 있습니다. 이 글에서는 주어진 배열의 차원을 출력하는 C++ 프로그램을 단계별로 살펴봅니다.
알고리즘
템플릿 함수를 사용해 배열의 현재 크기를 구하고, 배열의 마지막 차원에 도달할 때까지 해당 함수를 재귀적으로 호출하면서 각 차원의 크기를 순서대로 출력합니다.
핵심 원리
배열을 참조(&) 형태로 매개변수에 전달하면 컴파일러가 배열의 실제 크기를 그대로 인식할 수 있습니다. 따라서 별도의 크기 계산 없이 템플릿 매개변수만으로 차원 크기를 얻을 수 있으며, 2차원 배열용으로 오버로드된 함수가 내부적으로 첫 번째 행을 1차원 배열처럼 전달해 나머지 차원을 이어서 출력하는 구조입니다.
예제 코드
#include <iostream>
using namespace std;
// 1차원 배열: 마지막 차원의 크기를 출력
template <typename T, size_t N>
void printDimensionsOfArray(const T (&a)[N]) {
cout << N;
}
// 2차원 배열: 첫 번째 차원을 출력한 뒤 재귀 호출
template <typename T, size_t N, size_t M>
void printDimensionsOfArray(const T (&a)[N][M]) {
cout << "Dimensions of the Array is: " << N << " x ";
printDimensionsOfArray(a[0]);
}
int main() {
int a[6][7];
printDimensionsOfArray(a);
return 0;
}실행 결과
Dimensions of the Array is: 6 x 7
위 코드에서 배열 a는 6행 7열의 2차원 정수 배열입니다. 프로그램은 먼저 첫 번째 차원인 6을 출력한 뒤, a[0](크기가 7인 1차원 배열)을 재귀적으로 전달해 두 번째 차원인 7까지 출력하므로 최종 결과는 "6 x 7"이 됩니다.
더 높은 차원으로 확장하기
같은 패턴으로 템플릿 매개변수를 하나씩 추가한 오버로드를 정의하면 3차원, 4차원 등 임의의 고차원 배열에도 동일하게 적용할 수 있습니다.