vector는 동적으로 메모리를 할당한 배열이다. 기존 1차원 vector를 값을 초기화하여 선언하는 방법은 다음과 같았다.
vector <데이터 타입> 이름 (크기, 초기값) ; ex) vector<int> v;
2차원 vector를 선언하려면, vector의 데이터 타입에 vector를 또 담는다고 생각하면 된다.
vector<vector<int>>v;
→ 벡터의 자료형에 또 다른 벡터가 들어간다.
2차원 벡터는 2차원 배열과 같이 대괄호를 이용한 v[i][j]로 각 원소에 접근이 가능하다.
1. 행이 m개, 열이 n개인 2차원 벡터를 0으로 초기화하여 선언
vector <vector<int>> v(m, vector<int>(n,0));
벡터 v는 m개의 원소를 가지고 있으며, 이 m개의 원소들은 각각 n개의 원소를 0으로 초기화한 벡터를 담고 있다.
int m, n;
cin >> m >> n;
//m*n인 2차원 벡터를 0으로 초기화하여 선언
vector <vector<int>> v(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << v[i][j] << " ";
}
cout << "\n";
}
위 방법은 벡터를 선언함과 동시에 메모리도 지정한 만큼 할당했기 때문에, 위와 같은 방법으로 선언한 2차원 벡터는 따로 삽입 연산을 수행할 필요 없이, 범위(m*n) 내의 원소라면 아무 곳이나 v[i][j] 로 접근이 가능하다.
2. 각 행마다 열의 개수가 다를 때, m개의 행만 선언
//벡터를 자료형으로 가지고 있는 m 길이의 벡터 v를 선언
vector<vector<int>> v(m);
v[0].push_back(1);
v[0].push_back(2);
v[0].push_back(3);
v[1].push_back(10);
v[2].push_back(100);
v[2].push_back(200);
v[3].push_back(0);
위와 같이 원하는 행만큼한 벡터를 선언하고, 각 행마다 삽입 연산(push, insert 등)을 통하여 원하는 만큼 데이터를 삽입하는 것도 가능하다. (0행, 1행, 2행에 각각 다른 개수의 원소를 삽입할 수 있는 것이다.)
단, 원소를 삽입하기 전에는 v[i][j]를 이용하여 원소에 접근을 할 수 없다. 행 벡터만 선언된 것이고 각 행의 열 벡터는 아무 값도 들어있지 않기 때문이다.
'C++' 카테고리의 다른 글
[C++] - string → int 로 형변환하기 (1) | 2024.01.12 |
---|---|
[C++] - int → string 으로 형변환하기 (1) | 2024.01.10 |
[C++] - vector 사용법 정리 (STL) (1) | 2024.01.06 |
[C++] - sort()함수 사용법 정리(STL) (1) | 2024.01.02 |
[C++] - map 사용법 정리 (STL) (1) | 2023.12.30 |