먼저 https://codeup.kr/problem.php?id=1098의 문제에서 2차원 배열을 변수값을 이용해서 할당하기 위한 방법을 찾다가, Vector를 처음 사용하게 되었다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int w, h;
int n;
int l, d, x, y;
cin >> w >> h;//바둑판입력 w * h
vector<vector<int>> vector2D(w, vector<int>(h, 0));
cin >> n;//놓을 막대의 개수 입력
for (int i = 1; i <= n; i++) {//막대들 입력 길이(l),방향(d)(0가로1세로),좌표(x,y)
cin >> l >> d >> x >> y;
x = x-1, y = y-1;
//cout << x << y << endl;
if (d == 0) {//가로 방향 막대
for (int i = 1; i <= l; i++) {
vector2D[x][y] = 1;
y++;
}
}
else {
for (int i = 1; i <= l; i++) {
vector2D[x][y] = 1;
x++;
}
}
//출력
/*for (int i = 0; i < vector2D.size(); i++) {
for (int j = 0; j < vector2D[i].size(); j++) {
cout << vector2D[i][j];
}
cout << "\n";
}*/
}
//cout << "vector2D size : " << vector2D.size() << endl;
//cout << "vector2D size : " << vector2D[0].size() << endl;
for (int i = 0; i < vector2D.size(); i++) {
for (int j = 0; j < vector2D[i].size(); j++) {
cout << vector2D[i][j] << " ";
}
cout << "\n";
}
}
위에서 확인해야 할 사항은 두가지이다.
1. 벡터를 사용하기 위해서 #include <vector> 라이브러리를 import했다.
2. 벡터를 사용하기 위한 기본 식은 아래와같다.
vector<자료형> 벡터이름(생성개수, 생성한벡터의 초기값);
벡터는 자동으로 메모리를 할당해주고 알아서 긑에 들어가주고 삭제해주는...배열기반의 구조체이다.
-
vector<int> v;
-
vector<int> v(5); //벡터 5개 원소생성
-
vector<int> v(5,2); //벡터 5개원소를 2로채움
-
vector<int> v2(v1); //v2에 v1을 복사
다음으로 vector의 멤버 함수에 대해 알아보겠다.
-
v.assign(5,2); //2의 값으로 5개의 원소할당
-
v.at(idx); //idx번째 원소를 참조합니다. v[idx]보다 느리지만 범위점검함.
-
v[idx]; //배열처럼 접근 가능. 범위점검x
-
v.front(); //첫번째 원소 참조
-
v.back(); //마지막 원소 참조
-
v.clear(); // 모든 원소 제거, but 메모리는 남아있음. size만 줄고 capacity는 그대로 남아있는다.
-
v.push_back(6); //마지막 원소 뒤에 원소 6을 삽입한다.
-
v.pop_back(); //마지막 원소 제거.
-
v.begin(); //첫번째 원소 가리킴(iterator와 함께 사용)
-
v.end(); //마지막의 "다음"을 가리킨다(iterator와 함께 사용)
-
v.rbegin(); //reverse begin을 가리킨다(거꾸로해서 첫번째 원소 가리킨다)
-
v.rend(); //reverse end을 가리킨다
-
v.reverse(n); //n개의 원소를 저장할 위치를 예약한다.
-
v.resize(n); //크기를 n으로 변경한다. 더 커졌을경우 default값인 0으로 초기화.
-
r.resize(n, 3); //크기를 n으로 변경. 더 커졌을경우 인자의 값을 3으로 초기화.
-
v.size(); //원소의 개수 리턴
-
v.capacity(); //할당된 공간 크기 리턴. capacity는 2배씩 커진다. 2->4->8->16->....
-
v2.swap(v1); //v1과 v2의 원소와 capacity를 바꾼다.
-
v.insert(2,3,4); //2번째 위치에 3개의 4를 삽입.
-
v.insert(2,3); //2번쨰 위치에 3의 값을 삽입.
-
v.erase(iter); //iter가 가리키는 원소를 제거.
-
v.empty() //벡터가 비어있으면 true, 아니면 false.