-
[C++ STL] 2차원 vector 선언 및 사용법Language/C++ 2020. 1. 29. 16:30
※ 이 포스팅은 기본적으로 vector에 대한 개념을 알고 있다는 전제하에 작성.
우선 2차원 vector의 선언에 앞서 일반적인 vector 선언을 살펴보면,
12vector <int> v;v.pushback(7);위와 같은 형식으로 특정한 자료형을 동적으로 담을 수 있는 구조로 이루어져있다.
2차원 vector의 선언은 일반적인 vector의 형식과 동일하게 vector 안에 vector 자료형을 담는다는 느낌으로1vector < vector <int> > v;위와 같은 형태로 선언을 할 수 있다.
그럼 이렇게 선언된 2차원 vector를 어떻게 사용하냐?
1v.pushback(??????);물음표 부분에 무엇을 넣어야 하는지가 헷갈릴텐데, 앞서 int형을 담는 vector에 int형을 넣어줬던 것과 동일하게,
vector <int> 자료형을 담는 vector이므로 vector <int> 자료형을 넣어줘야 한다.
즉,
1234vector < vector <int> > v;vector <int> v2;v.pushback(v2);위와 같은 형태로 선언했던 자료형과 동일하게 넣어주면 된다.
vector의 원소는 배열에서 인덱스로 접근하는 것과 동일하게 v[0], v[1], v[2]... 와 같이 접근 가능하므로,
위의 2차원 vector도 v[0]으로 접근하게 된다면, 2차원 vector의 첫번째 원소인 v2에 접근 할 수 있다.
더 쉽게 말해서, v.pushback(v2)를 통해 2차원 vector v의 첫번째 인덱스(v[0]) 에 v2가 삽입 된 것이므로, 2차원 vector의 열에 해당하는 v2는 v[0].~~ 의 형식을 통해 접근 할 수 있다.
코드로 살펴보면
1234567891011vector < vector <int> > v;vector <int> v2;v.pushback(v2);v[0].pushback(7);// v[0]에 담겨있는 v2 벡터에 7 입력cout << v[0][0]; // 7 출력cout << v.at(0).at(0); // 동일하게 7 출력위와 같이 사용 가능하다.
추가로 조심해야 할 부분은,
12345678vector < vector <int> > v;vector <int> v2;v.pushback(v2);v2.pushback(7);cout << v[0][0]; // 런타임 에러2차원 vector인 v입장에서는 비어있는 v2를 입력받은 것이므로, 이후에 v2가 개별적으로 원소를 추가했고 안했고 여부에 상관없이, v[0][0]은 아직 할당받지 않은 값이므로 런타임 에러가 발생하게 된다.
2차원 vector에 대한 전체적인 구조를 살펴봤으니, 마지막으로 쉽게 초기화하는 법을 설명하겠다.
우선 일반적인 vector의 초기화부터 살펴보면1vector <int> v(10,0);위와같이 선언하게 되면 해당 vector는 10개의 원소를 가지고 있고, 각 값은 0으로 초기화된다.
동일하게 2차원 vector에도 적용하면,
1vector < vector <int> > v(10,vector <int>(10,0));위와 같이 10개의 원소를 가지고 있고, 각 원소(vector)는 10개의 원소를 가지고 이 원소들은 0으로 초기화 된다.
글로 써보니 복잡해보이지만 v[0][0] ~ v[10][10] 까지 전부 0인 2차원 vector로 초기화했음을 의미한다.
다른 블로그들은 대부분 초기화 방법만 띡 올려놔서 복기할겸 포스팅,,
'Language > C++' 카테고리의 다른 글
[C++ STL] Sort() 사용법 및 compare 함수 (0) 2020.01.31 cout, cin 최적화 방법과 주의점 (1) 2020.01.30