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