C++ - Vector

구동엽
|2024. 7. 29. 11:17

Vector Container란?

  • vector 컨테이너는 자동으로 메모리가 할당되는 배열이다.
  • template를 사용하기 때문에 데이터 타입은 마음대로 넣을 수 있다.
  • vector를 생성하면 heap(힙) 메모리에 생성되며 동적 할당된다.
  • 일반 배열과는 다르게 동적할당(힙)을 사용하므로 주로 입력값이 몇개인지 알지 못할 때 주로 사용된다.
  • 속도적인 측면에서 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있다.

Vector의 사용

  • <vector>의 헤더파일을 추가해야한다.
  • 선언 방법은 vector<[date type]> [변수이름]이다.
    • ex) vector<int> v;

Vector의 생성자와 연산자

  • vector<int> v
    • 비어있는 벡터를 생성
  • vector<int> v(5)
    • 기본값(0)으로 초기화된 5개의 원소를 가지는 vector v를 생성한다.
  • vector<int> v(5,2)
    • 2로 초기화된 5개의 원소를 가지는 vector v를 생성한다.
  • vector<int> v1(5,2)    vector<int> v2(v1);
    • v2는 v1 vector를 복사해서 생성된다.

Vector의 멤버 함수

  • v.assign(5,2)
    • 2의 값으로 5개의 원소 할당
  • v.at(index)
    • index번째 원소를 참조한다.
    • v[index] 보다 속도는 느리지만, 범위를 점검하므로 안전하다.
  • v[index]
    • index번째 원소를 참조한다.
    • 범위를 점검하지 않으므로 속도가 v.at(index)보다 빠르다.
  • v.front()
    • 첫번째 원소를 참조한다.
  • v.back()
    • 마지막 원소를 참조한다.
  • v.clear()
    • 모든 원소를 제거한다.
    • 원소만 제거하고 메모리는 남아있다.
    • size만 줄어들고 capacity는 그대로 남아있다.
  • v.push_back(1)
    • 마지막 원소 뒤에 원소 7일 삽입한다.
  • v.pop_back();
    • 마지막 원소를 제거한다.
  • v.begin()
    • 첫번째 원소를 가리킨다. (iterator와 사용)
  • v.end()
    • 마지막의 다음을 가리킨다. (iterator와 사용)
  • v.rbegin()
    • reverse begin을 가리킨다. (거꾸로 해서 첫번째 원소를 가리킨다.)
    • iterator와 사용
  • v.reserve(n)
    • n개의 원소를 저장할 위치를 예약한다.(미리 동적할당 해논다.)
  • v.resize(n)
    • 크기를 n으로 변경한다.
    • 더 커졌을 경우 default값인 0으로 초기화한다.
  • v.resize(n,3)
    • 크기를 n으로 변경한다.
    • 더 커졌을 경우 인자의 값을 3으로 초기화한다.
  • v.size()
    • 원소의 개수를 리턴한다.
  • v.capacity()
    • 할당된 공간의 크기를 리턴하낟.
    • 공간 할당의 기준은 점점 커지면서 capacity를 할당한다.
    • capacity는 기존 메모리의 2배로 증가하게 된다. 이런식으로 메모리를 할당하는 이유는 push_back이 일어날 때 마다 동적 할당을 하면, 비효율적이므로 미리 정해준 크기 만큼 동적할당을 한번에 한다.
원소 갯수 1 => capacity 1
원소 갯수 2 => capacity 2
원소 갯수 3 => capacity 4
원소 갯수 4 => capacity 4
원소 갯수 5 => capacity 8
원소 갯수 6 => capacity 8
원소 갯수 7 => capacity 8
원소 갯수 8 => capacity 8
원소 갯수 9 => capacity 16

 

  • v2.swap(v1)
    • v1과 v2의 원소의 capacity를 바꾼다. (모든걸 스왑)
    • v1의 capacity를 없앨 때 (할당한 메모리를 프로그램이 끝나기 전에 없애고 싶을때) 사용하기도 한다.
    • v2를 capacity가 0인 임시 객체로 만들어 스왑한다.
      • ex) vector<int>().swap(v1);
  • v.insert(2,3,4)
    • 2번째 위치에 3개의 4값을 삽입한다. (뒤에 있는 값들은 뒤로 밀린다.)
  • v.insert(2,3)
    • 2번째 위치에 3의 값을 삽입한다.
    • 삽입한 곳의 iterator를 반환한다.
  • v.erase(iterator)
    • iterator가 가리키는 원소를 제거한다.
    • size만 줄어들고 capacity(할당된 메모리)는 그대로 남는다.
    • erase는 파라미터 하나를 받을 때와 두개를 받을 때 다르다.
  • v.empty()
    • vector가 비어있으면 리턴 true
    • 비어있는 기준은 size이며, capacity와는 상관이 없다.

'🔊 Language > C++' 카테고리의 다른 글

C++ - Map  (0) 2024.08.01
C++ - STL 컨테이너  (0) 2024.07.31
C++ - Stack  (0) 2024.07.29
C++ - 우분투에서 Boost Library 설치하기  (0) 2024.07.19
C++ - 표준 템플릿 라이브러리(STL)  (0) 2024.07.18