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. 오늘의 핵심 요약 (정리)
- C++에서 2차원 벡터의 특정 원소에 접근하는 올바른 문법은 matrix[row][col]이다. (matrix[row, col]은 잘못된 문법이다.)
- matrix.size()는 행의 개수를, matrix[row].size()는 해당 행의 열의 개수를 반환한다.
- 크기가 할당되지 않은 벡터에는 인덱스로 바로 접근할 수 없으므로, 생성자 문법을 통해 공간을 미리 할당하거나 push_back() 함수를 사용하여 동적으로 원소를 삽입해야 한다.
'TIL' 카테고리의 다른 글
| [C++] Text RPG 프로젝트 개인 회고록 (1) | 2026.05.29 |
|---|---|
| [C++] 문자열 대소문자 변환 구현 및 탐색적 학습 방법론 (0) | 2026.05.28 |
| [C++]텍스트RPG를 만들면서 알게된 개념과 트러블슈팅 (0) | 2026.05.26 |
| [TIL] Visual Studio C++ 프로젝트 및 폴더 관리 마스터하기 (필터, OneDrive 충돌, 빌드 제외) (0) | 2026.05.22 |
| [C++] 프로그래머스 - 문자열 내림차순 정렬하기 (sort 함수의 인자와 STL의 구조적 이해) (0) | 2026.05.21 |