본문 바로가기
Coding Test/C++ 줍줍

[c++ 줍줍] vector 정리

by seoyamin 2022. 6. 14.

1. Definition of Vector

1-1. Vector의 등장 배경

       배열을 사용하려면 동적 할당을 해줘야 하는 C       " 귀찮 "

        ex )    int *arr = malloc(sizeof(int) * size);    // element의 type * size 만큼 동적 메모리 할당

                  free(arr);                                            //  마지막에 동적 할당한 메모리를 해제시킴

 

 

1-2. Vector 란 ?

      C++의 STL(Standard Template Library)에 속한 container = 가변 size를 가진 배열

        * element를 추가/삭제하면 자동으로 크기 조절됨

 

 

1-3. Size vs. Capacity

Size Capacity
vector에 현재 들어있는 element 개수 vector가 수용가능한 용량 (memory)

 


 

2. How to use Vector

2-1.  header file

#include <vector>

using namespace std;

 

 

2-2.  Vector 초기화

  vector<자료형> v ;       vector<int> v ;
  vector<자료형> v(크기) ;        vector<int> v(4) ;    =    {0, 0, 0, 0}

      항상 초기값은 0으로 설정됨
  vector<자료형> v = { a, b, c, d, e .... } ;       vector<int> v = {1, 2, 3, 4, 5} ;
  vector<자료형> v ;
  v.assign(크기, 초기값) ;
      vector v = {1, 2, 3} ;
      v.assign(3, 100) ;    =   {100, 100, 100}

      크기는 원래 크기, 초기값이 달라짐
  vector<vector<자료형>> v ;        2차원 벡터 (행, 열 둘다 가변)

 

 

 

2-3.  Vector 멤버 함수

vector<int> v

 

  멤버 함수 설명
정보 v.size( ) 원소 개수
  v.capacity( ) 할당된 공간 크기
  v.empty( ) 벡터 v가 비어있는지 true / false 리턴
(비어있다 = size가 0)
     
할당 v.assign(a, n) n개의 a를 원소로 할당
     
참조 v.at( i ) i번째 원소 참조
(범위 점검, 속도 느림)
  v[ i ] i번째 원소 참조
(범위 점검 X, 속도 빠름)
  v.front( ) 1st 원소 참조
  v.back( ) last 원소 참조
  v.begin( ) [iterator]  1st 원소 가리키는 iter 리턴
  v.end( ) [iterator]  last 원소의 다음을 가리키는 iter 리턴
     
삽입 v.insert(i, a) i번째 인덱스에 a값 삽입
(뒤로 한칸씩 밀어서 자리 확보)
  v.insert(i, a, n) i번째 인덱스에 a값 n개 삽입
(뒤로 한칸씩 밀어서 자리 확보)
  v.push_back(a) 맨 끝에 a값 삽입
     
제거 v.erase(iter) iter 위치의 원소 제거

ex )   v.erase(v.begin() + 3) ;
  v.erase(a, b) (a) ~ (b - 1) 인덱스의 원소 제거

ex )   v.erase(v.begin() + 1, v.begin() + 5)
  v.pop_back( ) last 원소 제거
  v.clear( )  모든 원소 제거
(size 감소, capacity 메모리 그대로)
     
교체 v2.swap(v1) v1와 v2를 swap
(capacity도 바뀜)