https://cplusplus.com/reference/vector/vector/?kw=vector

Vector의 주요 특징
vector는 임의 접근 반복자를 지원하는 배열 기반 컨테이너이자, 시퀀스 기반 컨테이너이다.
- 배열 기반 컨테이너의 특징
- 원소가 하나의 메모리 블록에 연속하게 저장된다.
- 원소가 추가되거나 삽입될 때 메모리
재할당
이 발생 할 수 있다.
- 따라서 메모리 크기를 알 수 있게 capacity(),reserve() 멤버 함수를 제공한다.
- 원소에 접근하는 at(), v[i]의 연산 속도는 빠르지만, insert(),erase(), push_back()등 의 연산 속도는 느리다.
- at()은 유효 범위를 점검하여 안전하게 원소를 접근하도록 한다.
- []연산자는 유효 범위를 점검하지 않아 원소 접근 속도를 조금 더 높인다.
- 시퀀스 기반 컨테이너이다.
- 원소가 상대적인 위치를 유지하므로 front(), back()멤버 함수를 제공한다.
- 하지만 배열 기반 컨테이너이므로 push_front(), pop_front() 멤버 함수는 제공하지 않는다. (비효율적이기 때문이다.)
vector의 템플릿 형식
멤버 타입
- value_type : 첫번째 파라미터
- allocator_type : 두번째 파라미터
- reference : allocator_type::reference
- const_reference : allocator_type::const_reference
- pointer : allocator_type::pointer
- const_pointer : allocator_type::const_pointer
- iterator : random_access_iterator의 value_type
- const_iterator : random_access_iterator의 const value_type
- reverse_iterator : reverse_iterator<iterator>
- const_reverse_iterator : reverse_iterator<const_iterator>
- difference_type : 다음과 동일한 부호 있는 integral type: iterator_traits<iterator>::difference_type
- size_type : 'difference_type’ 의 음이 아닌 값을 나타낼 수 있는 부호 없는 integral type
기본 멤버 함수 ( 생성자, 소멸자, 대입연산자)
- default constructor
explicit vector (const allocator_type& alloc = allocator_type());
ex) vector v : v는 빈 컨테이너이다.
- fill constructor
explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());
n개의 요소로 컨테이너를 구성한다. 각 요소는 val의 복사본이다.
- range constructor
template <class InputIterator> vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
[첫 번째, 마지막] 범위만큼 많은 요소를 가진 컨테이너를 구성합니다. 각 요소는 해당 범위의 해당 요소에서 동일한 순서로 구성된다
- copy constructor
vector (const vector& x);
x의 각 요소의 복사본이 있는 컨테이너를 동일한 순서로 구성한다.
- destructor
~vector();
모든 컨테이너 요소가 파괴되고 벡터에 의해 할당된 모든 스토리지 용량이 할당 해제됩니다.
- operator=
vector& operator= (const vector& x);
x의 모든 요소를 컨테이너로 복사합니다.
Iterators
- begin() : Return iterator to beginning
- end() : Return iterator to end
- rbegin() : Return reverse iterator to reverse beginning
- rend() : Return reverse iterator to reverse end
- cbegin() : Return const_iterator to beginning
- cend() : Return const_iterator to end
- crbegin() : Return const_reverse_iterator to reverse beginning
- crend() : Return const_reverse_iterator to reverse end
Capacity
- size() : Return size
- max_size() : Return maximum size
- resize() : Change size
- capacity() :Return size of allocated storage capacity
- emtpy() : Test whether vector is empty
- reserve() : Request a change in capacity
Element access
reference operator[] (size_type n); const_reference operator[] (size_type n) const;
벡터 컨테이너의 위치 n에 있는 요소에 대한 참조를 반환한다.
reference at (size_type n); const_reference at (size_type n) const;
벡터의 n 위치에 있는 요소에 대한 참조를 반환합니다. [] vs at : at은 벡터의 유요한 요소의 범위 내에 있는지 검사해 예외를 던진다.
reference front(); const_reference front() const;
벡터의 첫 번째 요소에 대한 참조를 반환한다.
reference back(); const_reference back() const;
벡터의 마지막 요소에 대한 참조를 반환한다.
Modifiers
- assign
range version
template <class InputIterator> void assign (InputIterator first, InputIterator last);fill version
void assign (size_type n, const value_type& val);range version : 새로운 내용은 첫 번째와 마지막 사이의 범위에 있는 각각의 요소들로부터 같은 순서로 구성된 요소들이다.
Fill version : 새로운 내용은 n개의 요소이며, 각 요소는 val의 복사본으로 초기화된다.
- push_back
void push_back (const value_type& val);
벡터 끝에 현재 마지막 요소 뒤에 새 요소를 추가한다.
- inset
single element
iterator insert (iterator position, const value_type& val);fill
void insert (iterator position, size_type n, const value_type& val);range
template <class InputIterator>벡터는 지정된 위치의 요소 앞에 새 요소를 삽입하여 확장되며, 삽입된 요소의 수만큼 컨테이너 크기를 효과적으로 늘린다.
- erase
iterator erase (iterator position); iterator erase (iterator first, iterator last);
벡터에서 단일 요소(위치) 또는 요소 범위([첫 번째, 마지막])를 제거한다.
- swap
void swap (vector& x);
컨테이너의 내용을 같은 유형의 다른 벡터 객체인 x의 내용으로 교환한다. 크기가 다를 수 있다.
- clear
void clear ();
벡터에서 모든 요소(파손된 요소)를 제거하여 용기 크기를 0으로 유지한다.
Allocator
- get_allocator
allocator_type get_allocator() const;
벡터와 연결된 할당자 개체의 복사본을 반환한다.
Non-member function overloads
- relational operators (vecotr)
template <class T, class Alloc> bool operator== (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs); template <class T, class Alloc> bool operator!= (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs); template <class T, class Alloc> bool operator< (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs); template <class T, class Alloc> bool operator<= (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs); template <class T, class Alloc> bool operator> (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs); template <class T, class Alloc> bool operator>= (const vector<T,Alloc>& lhs, const vector<T,Alloc>& rhs);
벡터 컨테이너 lhs와 rhs 사이에서 적절한 비교 작업을 수행한다.
Template specializations
- vector<bool>
template < class T, class Alloc = allocator<T> > class vector; // generic templatetemplate <class Alloc> class vector<bool,Alloc>; // bool specialization
이것은 벡터의 특화된 버전으로, bool type의 요소에 사용되고 공간에 최적화된다.
Uploaded by N2T