Problem Solving/PS With C++
[Cpp] STL 2D Vector
novs
2025. 4. 30. 10:22
반응형
Cpp STL의 2차원 벡터를 생성하는 방법에 대해 정리한 문서입니다.
개인적인 공부 내용을 정리하는 용도로 작성한 글이기에 잘못된 내용을 포함하고 있을 수 있습니다.
2차원 벡터를 선언하는 방법은 크게 2가지로 구분됩니다.
Case1. 벡터 내부에 벡터를 선언하여 2차원 벡터를 생성하는 방식
Case2. 1차원 벡터 배열을 사용해 2차원 벡터처럼 사용하는 방식
1번째 케이스는 Row, Column이 모두 동적인 벡터로 벡터 안에 백터가 들어가 있는 형태입니다.
반면 2번째 케이스는 Row는 정적이지만 Column은 동적인 벡터로 1차원 벡터를 배열 형태로 선언하여
실제로는 1차원 벡터이지만 2차원 벡터와 같이 사용 가능합니다.
주로 그래프 관련 알고리즘 문제를 풀이할때 인접리스트를 정의할때 2번 방식을 자주 사용합니다.
#1 벡터 내부에 벡터를 선언하여 2차원 벡터를 생성하는 방식
vector<vector<int>> vector_name 형태로 선언합니다.
행과 열이 모두 동적인 형태로 할당됩니다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
vector<vector<int>> myVec; // Row : Dynamic, Column : Dynamic
cout << "Row, Column이 모두 동적인 벡터" << endl;
// 0~2번 Row 추가
myVec.push_back(vector<int>()); // 0번 Row 추가
myVec.push_back(vector<int>()); // 1번 Row 추가
myVec.push_back(vector<int>()); // 2번 Row 추가
myVec[0].push_back(1);
myVec[0].push_back(1);
myVec[0].push_back(1);
myVec[1].push_back(10);
myVec[1].push_back(10);
myVec[1].push_back(10);
myVec[1].push_back(10);
myVec[2].push_back(100);
myVec[2].push_back(100);
for (int row = 0; row < myVec.size(); row++) {
cout << row << "번 째 행 - ";
for (int column = 0; column < myVec[row].size(); column++) {
cout << myVec[row][column] << " ";
}
cout << endl;
}
return 0;
}
Row, Column이 모두 동적인 벡터
0번 째 행 - 1 1 1
1번 째 행 - 10 10 10 10
2번 째 행 - 100 100
Program ended with exit code: 0
#2 1차원 벡터 배열을 사용해 2차원 벡터처럼 사용하는 방식
vector<int> vector_name[n] 형태로 선언합니다.
실제로 2차원 벡터는 아니지만 2차원 벡터 처럼 사용 가능합니다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> myVec[3];
// 0번째 Row에 Column 추가
myVec[0].push_back(1);
myVec[0].push_back(1);
myVec[0].push_back(1);
// 1번째 Row에 Column 추가
myVec[1].push_back(2);
myVec[1].push_back(2);
myVec[1].push_back(2);
// 2번째 Row에 Column 추가
myVec[2].push_back(3);
myVec[2].push_back(3);
for (int row = 0; row < 3; row++) {
cout << "#" << row << "번 행 - ";
for (int column = 0; column < myVec[row].size(); column++) {
cout << myVec[row][column] << " ";
}
cout << endl;
}
return 0;
}
#0번 행 - 1 1 1
#1번 행 - 2 2 2
#2번 행 - 3 3
Program ended with exit code: 0
반응형