티스토리 뷰

728x90
반응형

Vector 라이브러리

- 간단하게 말하면 배열을 이용한 리스트이다.

아무래도 배열을 이용한 리스트이기 때문에 처음에 선언해 줄때 배열의 최대 한도(배열의 크기)가 있을텐데 해당 크기를 넘어가면 재할당 및 복사가 이루어지기 때문에 비용이 많이 나오게 된다. 하지만, 자동으로 크기가 늘어나고, 쉽게 이용할 수 있는 장점 때문에 많이 사용하는 라이브러리이다.

 

Vector 선언

vector<E> 변수명; 이 기본형이고 이를 이용해서 여러가지 상황을 만들어 낸다.

vector<int> v;					// int형 벡터 v 생성
vector<int> v = {1, 2, 3};			// int형 1,2,3으로 초기화가 되어있는 v 생성
vector<int> v[5];				// int형 크기가 5인 v 생성
vector<int> v(5);				// int형 0으로 초기화 된 5개의 원소로 구성된 vector
vector<int> v(5, 1);				// int형 1로 초기화 된 5개의 원소로 구성된 vector
vector<int> v2(v);				// int형으로 v를 v2에 복사
vector<int> v = {1,2,3,4,5};
vector<std::pair<int, int>> v(m.begin(), m.end()); // m에 있는 원소들을 v에 복사

여기에서 문제

vector<int> v = {1,2,3,4,5};
v.push_back(1);
cout << v.capacity();

해당 출력값은 어떻게 나올까?

7이 나오게 된다.

 

그 이유에 대해 알아보자.

Vector의 크기 할당

처음에 말했던 것 처럼 vector는 배열로 이루어진 리스트이다. 배열은 처음에 선언을 할 때 크기와 함께 선언을 해준다. 만약 해당 크기를 넘어서서 배열을 추가하려 하면 어떻게 될까?

오류가 뜨게 된다. 

하지만, vector라이브러리에서 해당 오류를 알아서 잡아준다.

이 오류를 잡는 방법으로는 배열의 크기를 늘려 옮겨주는 것으로 생각하면 된다.

이를 사진으로 표현하면 다음과 같다.

다음과 같이 되는 방식을 순서대로 표현하려 한다.

1. capacity와 size의 크기가 동일한가? -> 예

2. capacity/2의 크기를 더한 만큼의 크기의 배열을 생성한다.(5 + 5//2 = 7) -> capacity가 7인 배열

3. 원래의 원소들을 전부 옮겨준다.

4. 원소를 push_back해준다.

 

여기에서 2번과 3번 과정에서 배열의 capacity가 커지면 비용이 엄청나게 된다. 

이러한 이유로 초반에 자신이 사용할 capacity를 지정하여 활용해 주는것이 가장 좋다.

 

Vector의 Public Function

front(): 1(첫 번째 원소)

back(): 1(마지막 원소)

begin(): 첫번째 위치(iterator)

end(): 마지막의 다음 위치(iterator)

size(): 원소의 개수로 6이 된다.

capacity(): 7(총 용량)

 

push_back(a): 마지막 자리 다음에 a원소 추가

pop_back(): 마지막 위치에 있는 원소 삭제

- push_front, pop_front()는 지원하지 않는다. -> 배열이기 때문에 모든 원소를 앞당겨야 하기 때문에 큰 비용이 발생한다. 계속해서 push_front와 pop_front()를 사용하는 경우 다른 자료구조를 사용해야 좋다.

 

empty(): 비어있으면 true, 아니면 false

clear(): 초.기.화.

 

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

iterator형태로 전해줘야 한다.

ex) v.erase(v.begin() + 2) // 4가 제거된다. -> v.begin()은 iterator형태로 적용이 된다. iterator와 관련된 포스팅은 나중에 작성..

아래부분은 first부터 last까지 사이에 있는 모든 원소를 지워주는 역할을 한다.

 

 

 

https://www.cplusplus.com/reference/vector/vector/

 

vector - C++ Reference

difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t

www.cplusplus.com

해당 URL을 들어가보면 vector의 모든 함수를 살펴볼 수 있다. 위에는 기본적으로 많이 활용되는 함수들을 설명하였다.

728x90
반응형

'코딩 씹어먹기 > C++' 카테고리의 다른 글

[C++] cstring  (0) 2022.05.24
[C++] string 라이브러리  (0) 2022.05.23
[C++] 배열  (0) 2022.05.18
[C++] List 라이브러리  (0) 2022.03.21
[C++] algorithm 라이브러리  (0) 2022.03.21