ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++ STL] 2차원 vector 선언 및 사용법
    Language/C++ 2020. 1. 29. 16:30

    ※ 이 포스팅은 기본적으로 vector에 대한 개념을 알고 있다는 전제하에 작성.

     

    우선 2차원 vector의 선언에 앞서 일반적인 vector 선언을 살펴보면,

     

    1
    2
    vector <int> v;
    v.pushback(7);

     

    위와 같은 형식으로 특정한 자료형을 동적으로 담을 수 있는 구조로 이루어져있다.

     
    2차원 vector의 선언은 일반적인 vector의 형식과 동일하게 vector 안에 vector 자료형을 담는다는 느낌으로
     
    1
    vector < vector <int> > v;

     

    위와 같은 형태로 선언을 할 수 있다.

     

    그럼 이렇게 선언된 2차원 vector를 어떻게 사용하냐?

     

    1
    v.pushback(??????);

     

    물음표 부분에 무엇을 넣어야 하는지가 헷갈릴텐데, 앞서 int형을 담는 vector에 int형을 넣어줬던 것과 동일하게,

    vector <int> 자료형을 담는 vector이므로 vector <int> 자료형을 넣어줘야 한다.

     

    즉,

     

    1
    2
    3
    4
    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].~~ 의 형식을 통해 접근 할 수 있다.

     

    코드로 살펴보면

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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 출력

     

    위와 같이 사용 가능하다.

     

    추가로 조심해야 할 부분은,

     

    1
    2
    3
    4
    5
    6
    7
    8
    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의 초기화부터 살펴보면

     

    1
    vector <int> v(10,0);

     

    위와같이 선언하게 되면 해당 vector는 10개의 원소를 가지고 있고, 각 값은 0으로 초기화된다.

     

    동일하게 2차원 vector에도 적용하면,

     

    1
    vector < 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

    댓글

Designed by Tistory.