Vector 컨테이너

Vector는 시퀀스 컨테이너이고 원소의 저장위치가 정해져 있는 배열기반 컨테이너이다. 가변길이의 컨테이너이고 원소를 컨테이너에 계속 추가하게 되면 추가 할때마다 메모리를 계속 재할당을 해주게 된다. 

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.assgin(b,e) v를 반복자 구간 [b, e)로 할당한다.
v.at(i) v의 i번째 원소를 참조하고 범위 점검을 한다.
v.back() v의 마지막 원소를 참조한다.
p = v.begin() p는 v의 첫 원소를 가리키는 반복자
x = v.capacity() x는 v에 할당된 공간의 크기(실제 할당된 메모리 크기, vector만 존재)
v.clear() v는 모든 원소를 제거한다.
v.empty() v가 비었는지 조사한다.
p = v.end() p는 v의 끝을 표시하는 반복자.
q = v.erase(p) p가 가리키는 원소를 제거하고 q는 다음원소를 가리킨다.
q=v.erase(b,e) 반복자 구간 [b,e)의 모든 원소를 제거하고 q는 다음원소를 가리킨다.
v.front() v의 첫번째 원소를 참조한다.
q = v.insert(p,x) p가 가리키는 위치에 x값을 삽입하고 q는 삽입한 원소를 가리키는 반복자이다.
v.insert(p,n,x) p가 가리키는 위치에 n개의 x값을 삽입한다.
v.insert(p,b,e) p가 가리키는 위치에 반복자 구간 [b, e)의 원소를 삽입한다.
x = v.max_size() x는 v가 담을 수 있는 최대 원소 갯수이다.
v.pop_back() v의 마지막 원소를 제거한다.
v.push_back(x) v의 끝에 x를 삽입한다.
p = v.rbegin() p는 v의 역 순차열의 첫 원소를 가리키는 반복자다
p = v.rend() p는 v의 역 순차열의 끝을 표시한하는 반복자다.
v.reserve(n) n개의 원소를 저장할 공간을 예약한다
v.resize(n, x) v의 크기를 n으로 변경하고 확장되는 공간의 값을 x값으로 초기화 한다.
v.size() v원소의 갯수이다.(저장 원소의 갯수)
v.swap(v2) v와 v2를 swap한다.
v.emplace_back(x) 객체 x의 임시 객체 생성과 소멸, 복사를 하지 않아도 vector내에서 직접 객체를 생성하여 값을 집어 넣는다. (push_back의 경우 임시 객체를 생성 후 복사, 소멸의 과정을 거친다)
연산자 설명
v1 == v2 v1과 v2의 모든 원소가 같은가?
v1 != v2 v1과 v2의 모든 원소중 하나라도 다른 원소가 있는가?
v1 < v2 문자열 비교 처럼 v2가 v1보다 큰가?
v1 <= v2 문자열 비교처럼 v2가 v1보다 크거나 같은가?
v1 > v2 문자열 비교처럼 v1이 v2보다 큰가?
v1 >= v2 문자열 비교처럼 v1이 v2보다 크거나 같은가?
v[i] v의 i번째 원소를 참조한다.

(1) capacity 함수

capacity가 원소의 갯수보다 크지 않다면 메모리 재할당을 수행하고, 이전 메모리 크기의 1/2만큼을 더 할당하는 정책을 사용한다. size를 늘릴때 capacity가 늘어나지만 size를 줄일 때는 capacity는 변함이 없다. 따라서 capacity를 0으로 만들고자 하면 컨테이너끼리 교환(swap)을 통해 capacity를 0으로 만들 수 있다.

 

(2) at 함수와 []연산자차이

at함수는 범위를 점검하고, []연산자의 경우 범위 점검을 하는 부분에서 차이난다.(at의 경우 out_of_range예외 발생)

'프로그래밍 > C & C++' 카테고리의 다른 글

Smart Pointer  (0) 2020.04.22
Virtual Function  (0) 2020.04.21
Dangling Pointer(허상 포인터)  (0) 2020.04.17
STL Vector와 List의 차이점  (0) 2020.03.25
정적(static)&공유(shared) 라이브러리  (0) 2020.03.25
더보기

댓글,

야미야미얌얌

프로그래밍 및 IT 기술