내가 초창기 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

클래스와 객체, 인스턴스는 정말 자주 사용되는 용어이다.

 

하지만 종종 혼동되는 경우가 많아 아래 소스코드로 간단하게 정리해본다.

 

// 클래스
class member{
};

int main(void){
    member m1; // m1은 객체 or m1은 member의 인스턴스
    member m2; // m2은 객체 or m2은 member의 인스턴스

    return 0;
}

 

결론적으로 객체와 인스턴스는 동일한 m1을 지칭한다.

 

하지만 객체를 좀 더 추상적인 표현이라고 하는데, 정확한 구분은 잘 모르겠다.

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

vector container에 대하여  (0) 2023.04.11

+ Recent posts