vector 컨테이너는 대표적인 시퀀스 컨테이너로 배열과 비슷하여 사용이 쉬우며 자주 사용된다.
vector는 임의 접근 반복자(Random Access Iterator)를 지원하는 배열 기반 컨테이너이다.
vector의 가장 큰 특징 중 하나는 원소가 하나의 메모리 블록에 연속하게 저장된다는 것이다.
그렇다보니 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 비용을 지불하게 된다.
그래서 메모리 할당의 크기를 알 수 있게 capacity() 함수를 제공하여 한번에 메모리를 할당할 수 있는 reserve()함수도 제공한다.
원소가 연속하게 저장되므로 []연산자 또는 at으로 읽기에는 빠르지만 inser(), erase(), push_back()등은 비효율 적이다.
시퀀스 컨테이너는 차례차례 원소를 추가하고 제거하는 push_back()과 pop_back()을 가지며, 첫 원소와 마지막 원소를 참조하는 front(), back()을 가진다. 또한 지정한 위치에 원소를 삽입할 수 있는 insert()를 가진다.
vector는 앞쪽이 막혀 있는 형태로 앞쪽에는 원소를 추가/제거할 수 없으며 뒤쪽에만 추가/제거할 수 있다.
템플릿 형식
template<typename T, typename Allocator = allocator < T > class vector
T는 vector 컨테이너 원소의 형식
생성자
- vector v : v는 빈 컨테이너다
- vector v(n) : v는 기본값으로 초기화된 n개의 원소를 갖는다.
- vector v(n,x) : v는 x 값으로 초기화 된 n개의 원소를 갖는다.
- vector v(v2) : v는 v2 컨테이너의 복사본이다. (복사 생성자 호출)
- vector v(b,e) : v는 반복자 구간 [b,e) 로 초기화 된 원소를 갖는다
멤버 함수
- v.assign(n,x) : v에 x 값으로 n개의 원소를 할당한다.
- v.at(i) : v의 i번째 원소를 참조한다.
- v.back() : v의 마지막 원소를 참조한다.
- p = v.begin() : p는 v의 첫 원소를 가리키는 반복자.
- p = v.capacity() : x는 v에 할당된 공간의 크기
- v.clear() : v의 모든 원소를 제거한다.
- v.empty() : v가 비었는지 조사한다.
- p = v.end() : p는 v의 끝을 표식하는 반복자
- q = v.erase(p) : p가 가리키는 원소를 제거한다. q는 다음 원소를 가리킨다.
- v.front() : v의 첫번째 원소를 참조한다.
- q = v.insert(p,x) : p가 가리키는 위치에 x값을 삽입한다. q는 삽입한 원소를 가리키는 반복자 이다.
- v.insert(p,n,x) : p가 가리키는 위치에 n개의 x 값을 삽입한다.
- x = v.max_size() : x는 v가 담을 수 있는 최대 원소의 개수(메모리의 크기)
- v.pop_back() : v의 마지막 원소를 제거한다.
- v.push_back() : v의 끝에 x를 추가한다.
- p = v.rbegin() : p는 v의 역 순차열의 첫 원소를 가리키는 반복자다.
- p = v.redn() : p는 v의 역 순차열의 끝을 표시하는 반복자
- v.reserve(n) : n개의 원소를 저장할 공간을 예약한다.
- v.resize(n) : v의 크기를 n으로 변경하고 확장되는 공간의 값을 기본 값으로 초기화한다.
- v.resize(n,x) : v의 크기를 n으로 변경하고 확장되는 공간의 값을 x으로 초기화한다.
- v.size() : v의 원소 갯수
- v.swap(v2) : v와 v2를 swap 한다
연산자
- v1==v2 : v1과 v2의 모든 원소가 같은가?
- v1!=v2 : v1과 v2의 모든 원소 중 하나라도 다른 원소가 있는가?
v1 < v2 : 문자열 비교처럼 v2가 v1 보다 큰가?
v1 > v2 : 문자열 비교처럼 v1이 v2 보다 큰가?
v[i] : v의 i번째 원소를 참조한다.