[C++] STL vector 벡터 정리

Dragony·2019년 12월 23일

C++

목록 보기
2/3

vector 컨테이너

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번째 원소를 참조한다.
profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글