TIL

[C++]2차원 벡터(Vector)의 개념과 활용

think95592 2026. 5. 27. 21:02

1. 2차원 벡터의 개념 및 구조

C++에서 2차원 벡터(std::vector<std::vector<T>>)는 '벡터를 원소로 가지는 벡터'를 의미한다. 이는 수학에서의 행렬(Matrix)이나 일반적인 2차원 배열과 유사한 격자형(표) 구조를 형성한다.

  • 행(Row): 가로줄을 의미하며, 아파트의 '층'에 비유할 수 있다. matrix.size()를 통해 전체 행의 개수를 구할 수 있다.
  • 열(Column): 세로줄을 의미하며, 아파트의 '호수'에 비유할 수 있다. matrix[0].size()를 통해 하나의 행이 가진 열의 개수를 구할 수 있다.

주의: 프로그래밍에서 모든 인덱스(Index)는 1이 아닌 0부터 시작한다. 따라서 $m \times n$ 크기의 행렬에서 마지막 원소의 인덱스는 [m-1][n-1]이 된다.

2. 2차원 벡터의 선언과 공간 초기화

2차원 벡터를 선언할 때 공간의 크기를 미리 지정하지 않고 인덱스([row][col])로 접근하면 런타임 에러(Segmentation Fault)가 발생한다. 따라서 행과 열의 크기를 미리 할당하는 초기화 문법을 숙지해야 한다.

[초기화 공식]

C++
 
std::vector<std::vector<자료형>> 변수명(행_개수, std::vector<자료형>(열_개수, 초기값));
  • 첫 번째 인자 (행_개수): 생성할 외각 벡터의 크기(세로 크기)를 지정한다.
  • 두 번째 인자 (std::vector<자료형>(열_개수, 초기값)): 내부 벡터의 크기(가로 크기)와 그 공간을 채울 초기값을 지정한다.

예시 (3행 4열의 공간을 0으로 초기화):

C++
 
// 3개의 행을 만들고, 각 행을 4칸짜리 0으로 채워진 벡터로 초기화한다.
vector<vector<int>> matrix(3, vector<int>(4, 0));

3. 2중 반복문(For)을 통한 원소 순회

2차원 벡터의 모든 원소에 접근하기 위해서는 외각의 행을 순회하는 반복문과 내부의 열을 순회하는 반복문이 겹쳐진 2중 반복문 구조를 사용해야 한다.

이때 변수명을 i, j와 같은 단일 문자로 사용하는 것보다 row, col로 명시하는 것이 코드의 가독성과 유지보수 면에서 훨씬 우수하다.

C++
 
int row_count = matrix.size();       // 전체 행의 개수
int col_count = matrix[0].size();    // 전체 열의 개수

for (int row = 0; row < row_count; ++row) {
    for (int col = 0; col < col_count; ++col) {
        // matrix[row][col]을 통해 각 격자의 데이터에 접근 및 연산 수행
        std::cout << matrix[row][col] << " ";
    }
    std::cout << "\n";
}

4. 오늘의 핵심 요약 (정리)

  1. C++에서 2차원 벡터의 특정 원소에 접근하는 올바른 문법은 matrix[row][col]이다. (matrix[row, col]은 잘못된 문법이다.)
  2. matrix.size()는 행의 개수를, matrix[row].size()는 해당 행의 열의 개수를 반환한다.
  3. 크기가 할당되지 않은 벡터에는 인덱스로 바로 접근할 수 없으므로, 생성자 문법을 통해 공간을 미리 할당하거나 push_back() 함수를 사용하여 동적으로 원소를 삽입해야 한다.