본문 바로가기

c++

Vector

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의 템플릿 형식

💡
template < class T, class Alloc = allocator<T> > class 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> void insert (iterator position, InputIterator first, InputIterator last);

    벡터는 지정된 위치의 요소 앞에 새 요소를 삽입하여 확장되며, 삽입된 요소의 수만큼 컨테이너 크기를 효과적으로 늘린다.

    • 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

'c++' 카테고리의 다른 글

map  (0) 2023.03.20
STL  (0) 2023.03.20
함수포인터  (0) 2023.03.20
연산자 오버로딩  (0) 2023.03.20