c 스타일 배열을 2차원으로 선언하는 방법은 간단하다. arr[i][j]와 같이 선언하면 된다.
벡터를 2차원으로 선언하려면 어떻게 해야 할까?
2차원 배열은 크기가 i*j인 표의 형태로 이해하기 마련이다. 실상은 i개의 배열이 있고, 각각의 원소가 j개의 배열을 가리키고 있는 형태이다.
다시 말해 배열이 배열을 담고 있는 형태이다.
arr[][0] | arr[][1] | arr[][2] | ||
arr[0] | → | arr[0][0] | arr[0][1] | arr[0][1] |
arr[1] | → | arr[1][0] | arr[1][1] | arr[1][2] |
arr[2] | → | arr[2][0] | arr[2][1] | arr[2][2] |
arr[3] | → | arr[3][0] | arr[3][1] | arr[3][2] |
벡터도 이와 같이 벡터가 벡터를 담은 형태로 선언하면 2차원 벡터가 된다.
vector<vector<int>> v;
vector의 자료형으로 int가 아니라 vector를 주는 것이다.
2차원 벡터를 초기화하는 방법도 살펴보자.
벡터를 초기화할 때는
vector<int> v(n, 0);
이와 같이 벡터명 뒤에 괄호로 인수를 준다. 원소의 개수와 초기화할 값을 우선 넣는다고 하자.
이를 2차원에 그대로 적용하면 된다.
vector<vector<int>> v(n, vector<int>(n, 0));
v라는 벡터는 n개의 원소를 가지고 있는데, 각 원소를 int 자료형을 담은 vector로 초기화하라는 뜻이다. 내부의 벡터는 n개의 원소를 담고 있으며 0이라는 값으로 초기화된다.
2차원 벡터를 사용할 때는 배열과 동일하게 첨자를 통해 사용할 수 있다.
int a = v[1][2];