내가 초창기 VTM 소스코드를 분석할 때, c++에서 주로 사용하는 vector에 대한 개념이 없어서 고생했던 기억이 있다.

정말 별거 없는 내용이지만, 추후 다시 remind도 할 겸 vector와 관련된 내용을 정리해본다.

 

c++에서 vector란 배열과 비슷한 역할을 하고 있다.

하지만 vector는 배열의 맨 앞과 뒷부분을 제거하는데에 효율적이며, 배열보다 계산속도가 빠르다는 장점이 있어서 Video codec에서 매우 애용하는 문법이다.

다만, index 기반 접근도 가능하지만 비효율적이므로 이 경우에는 vector를 사용하지 않는다.

 

vector를 선언하는 방법
  • vector<int> name;
    - 비어있는 vector를 생성한다.
  • vector<int> name(3);
    - 0으로 초기화 된 3개의 원소를 갖는 vector를 생성한다.
  • vector<int> name(3,5);
    - 5로 초기화 된 3개의 원소를 갖는 vector를 생성한다.
  • vector<int> name1(name2);
    - name1에 name2를 복사하여 생성한다.
vector의 맴버 함수들
  • name.at(idx);
    - idx번째 원소를 참조
  • name[idx];
    - idx번째 원소를 참조
  • name.front();
    - 첫번째 원소를 참조
  • name.back();
    - 마지막 원소를 참조
  • name.clear();
    - 모든 원소를 제거함
    - size만 제거되고 capacity는 변경사항 없음
  • name.push_back(3);
    - 마지막 원소 뒤에 원소 3을 삽입함
  • name.pop_back();
    - 마지막 원소를 제거함
  • name.begin();
    - 첫번째 원소를 가리킴
  • name.end();
    - 마지막의 다음번째를 가리킴
  • name.size();
    - 원소의 개수를 리턴함
  • name.capacity()
    - 할당된 공간의 크기를 리턴함
  • name1.swap(name2);
    - name2와 name1의 원소의 capacity를 바꿔줌. (모든 값을 바꿔줌)
  • name.insert(2,3,4);
    - 2번째 위치에 3개의 공간을 추가하여 4를 삽입함. (뒤에값들은 뒤로 밀림)
  • name.insert(2,3);
    - 2번재 위치에 3의 값을 삽입함
  • name.erase(x);
    - x가 가리키는 원소를 제거함
    - size만 줄고, capacity(할당된 메모리)는 그대로 남게됨
  • name.empty();
    - vector가 비어있다면 true 값을 리턴함
    - 비어있다는 기준은 size가 0이라는 의미이며, capacity와는 상관이 없음
vector의 특징: size와 capacity와의 관계

vector는 capacity로 메모리가 할당되어 있으며, 그 안에 초기화된 값들의 개수인 size로 구성되어 있다.

 

 

'개인공부 > C언어' 카테고리의 다른 글

클래스 객체 인스턴스  (0) 2022.02.03

+ Recent posts