일반적인 vector 선언
vector <int> v;
v.pushback(7);
위와 같은 형식으로 특정한 자료형을 동적으로 담을 수 있는 구조이다.
2차원 vector의 선언은 일반적인 vector의 형식과 동일하다. 다만 vector 안에 vector 자료형을 담는다고 생각하면 된다.
아래와 같은 형태로 선언을 할 수 있다.
2차원 vector의 선언과 활용
vector < vector <int> > v;
그렇다면 이렇게 선언된 2차원 vector에 pushback을 사용하려하면 어떻게 활용해야할까.
v.pushback(??????);
물음표 부분에 무엇을 넣어야 하는지가 헷갈릴텐데, 앞서 int형을 담는 vector에 int형을 넣어줬던 것과 동일하게,vector <int>
자료형을 담는 vector이므로 vector <int>
자료형을 넣어줘야 한다.
vector < 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].~~ 의 형식을 통해 접근 할 수 있다.
코드로 살펴보면
vector < 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 출력
위와 같이 사용 가능하다.
추가로 조심해야 할 부분
vector < 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의 초기화부터 살펴보면
vector <int> v(10,0);
위와같이 선언하게 되면 해당 vector는 10개의 원소를 가지고 있고, 각 값은 0으로 초기화된다.
동일하게 2차원 vector에도 적용하면,
vector < vector <int> > v(10,vector <int>(10,0));
위와 같이 10개의 원소를 가지고 있고, 각 원소(vector)는 10개의 원소를 가지고 이 원소들은 0으로 초기화 된다.
v[0][0] ~ v[10][10] 까지 전부 0인 2차원 vector로 초기화했음을 의미한다.
'Computer > Programming Language' 카테고리의 다른 글
pickle 간단 사용법 feat. with문 (0) | 2021.02.18 |
---|---|
if __name__ == '__main__'이 뭘까? (0) | 2021.02.15 |
list, tuple, set 간의 자료 구조 변경 (0) | 2021.02.15 |
Python basic skills[수정 중] (0) | 2021.02.14 |
[기본문법] 리스트(list),튜플(tuple), 딕셔너리(dictionary) 정리 (0) | 2020.11.29 |