티스토리 뷰
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의 모든 함수를 살펴볼 수 있다. 위에는 기본적으로 많이 활용되는 함수들을 설명하였다.
'코딩 씹어먹기 > 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 |
- Total
- Today
- Yesterday
- manber myers
- 분할정복
- 해시맵
- fastIo
- Set
- portal1
- readInt
- 큰 수 계산
- fread
- 비트마스킹
- cin.tie(nullptr);
- 피보나치
- 확장 유클리드
- list
- 좌표 압축 알고리즘
- readString
- 행렬 멱법
- 트리보나치
- tsp알고리즘
- deque와 vector의 차이
- writeString
- 플로이드-워셜
- unistd.h
- ios::sync_with_stdio(false)
- bits/stdc++.h
- SCC 알고리즘
- scanf
- writeInt
- Witcher3
- 에라토스테네스의 체
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |