Vector

songtofu·2022년 3월 18일
0

이 글의 작성 계기

  • ft_containers에서 vector를 구현하려 하는 와중 모르는 것들을 정리하려고

Vector의 모습

Vector 생성자

explicit vector(const Allocator& = Allocator());
explicit vector(size_type n, const T& value = T(),
                const Allocator& = Allocator());
template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
vector(const vector<T, Allocator>& x);

벡터 컨테이너 객체를 생성하고, 사용한 생성자에 따라 벡터 원소들을 초기화 한다.
1.

explicit vector(const Allocator& = Allocator());
  • 디폴트 생성자로 빈 벡터를 생성한다. 어떠한 원소도 담지 않고 있으므로 size는 0dlek.
explicit vector(size_type n, const T& value = T(),
                const Allocator& = Allocator());

-값이 T인 원소를 n개 가지는 벡터 컨테이너를 생성한다.

template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());

-first부터 last번째 원소까지 반복자가 순회(iterate)하며, 각각의 원소들을 생성되는 벡터 컨테이너의 원소로 복사한다. (복사할 범위의 시작과 끝을 나타내는 반복자이다. 이 때 first 가 가리키는 원소 부터, last 가 가리키는 원소바로 직전까지 복사가 된다)

vector(const vector<T, Allocator>& x);
  • 복사 생성자. 벡터 x와 동일한 원소(복사본)을을 가지는 벡터를 생성한다.

capacity

  • vector의 요소들을 담을 수 있는 메모리가 할당되어 있는 공간의 용량.

size

  • 실제 유요한 요소들의 갯수.

Vector 공간이 확장되는 과정

ex) push_back함수를 통해 새로운 요소를 맨 뒤에 추가할 때,
capacity > size 보다 큰 상황이라면, 그냥 맨 뒤의 공간에 요소를 복사해 넣고 ++size가 일어난다.
capacity == size 라면, capacity가 증가한 새로운 연속된 공간을 할당하고 기존의 모든 요소들을 복사하고 (기존의 정보는 삭제) capacity > size의 상황을 만들어 놓는다고 맨 뒤에 요소를 복사한 후 ++size를 한다.

reserve

  • capacity를 프로그래머가 원하는 크기로 할당해준다.

resize

  • 지정한 수 만큼 요소를 만들어준다. 내부에서 capacity가 작으면 재할당이 일어난다.
  • 증가되는 size만큼 복사생성자가 호출된다. (c++11까지는 복사생성자, 최신은 생성자가 호출)
    -resize의 원형
void resize( size_type count, T value = T() ); // (until C++11)
void resize( size_type count ); // (1)	(since C++11)
void resize( size_type count, const value_type& value ); // (2)	(since C++11)

모두 기본값을 따로 지정하지 않으면, default 생성자에 의해 모든 요소가 초기화 된다.

출처

Microsoft

profile
읽으면 머리에 안들어와서 직접 쓰는 중. 잘못된 부분 지적 대환영

0개의 댓글

관련 채용 정보