Vector Container란?
- vector 컨테이너는 자동으로 메모리가 할당되는 배열이다.
- template를 사용하기 때문에 데이터 타입은 마음대로 넣을 수 있다.
- vector를 생성하면 heap(힙) 메모리에 생성되며 동적 할당된다.
- 일반 배열과는 다르게 동적할당(힙)을 사용하므로 주로 입력값이 몇개인지 알지 못할 때 주로 사용된다.
- 속도적인 측면에서 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있다.
Vector의 사용
- <vector>의 헤더파일을 추가해야한다.
- 선언 방법은 vector<[date type]> [변수이름]이다.
- ex) vector<int> v;
Vector의 생성자와 연산자
- vector<int> v
- 비어있는 벡터를 생성
- vector<int> v(5)
- 기본값(0)으로 초기화된 5개의 원소를 가지는 vector v를 생성한다.
- vector<int> v(5,2)
- 2로 초기화된 5개의 원소를 가지는 vector v를 생성한다.
- vector<int> v1(5,2) vector<int> v2(v1);
- v2는 v1 vector를 복사해서 생성된다.
Vector의 멤버 함수
- v.assign(5,2)
- 2의 값으로 5개의 원소 할당
- v.at(index)
- index번째 원소를 참조한다.
- v[index] 보다 속도는 느리지만, 범위를 점검하므로 안전하다.
- v[index]
- index번째 원소를 참조한다.
- 범위를 점검하지 않으므로 속도가 v.at(index)보다 빠르다.
- v.front()
- 첫번째 원소를 참조한다.
- v.back()
- 마지막 원소를 참조한다.
- v.clear()
- 모든 원소를 제거한다.
- 원소만 제거하고 메모리는 남아있다.
- size만 줄어들고 capacity는 그대로 남아있다.
- v.push_back(1)
- 마지막 원소 뒤에 원소 7일 삽입한다.
- v.pop_back();
- 마지막 원소를 제거한다.
- v.begin()
- 첫번째 원소를 가리킨다. (iterator와 사용)
- v.end()
- 마지막의 다음을 가리킨다. (iterator와 사용)
- v.rbegin()
- reverse begin을 가리킨다. (거꾸로 해서 첫번째 원소를 가리킨다.)
- iterator와 사용
- v.reserve(n)
- n개의 원소를 저장할 위치를 예약한다.(미리 동적할당 해논다.)
- v.resize(n)
- 크기를 n으로 변경한다.
- 더 커졌을 경우 default값인 0으로 초기화한다.
- v.resize(n,3)
- 크기를 n으로 변경한다.
- 더 커졌을 경우 인자의 값을 3으로 초기화한다.
- v.size()
- 원소의 개수를 리턴한다.
- v.capacity()
- 할당된 공간의 크기를 리턴하낟.
- 공간 할당의 기준은 점점 커지면서 capacity를 할당한다.
- capacity는 기존 메모리의 2배로 증가하게 된다. 이런식으로 메모리를 할당하는 이유는 push_back이 일어날 때 마다 동적 할당을 하면, 비효율적이므로 미리 정해준 크기 만큼 동적할당을 한번에 한다.
원소 갯수 1 => capacity 1
원소 갯수 2 => capacity 2
원소 갯수 3 => capacity 4
원소 갯수 4 => capacity 4
원소 갯수 5 => capacity 8
원소 갯수 6 => capacity 8
원소 갯수 7 => capacity 8
원소 갯수 8 => capacity 8
원소 갯수 9 => capacity 16
- v2.swap(v1)
- v1과 v2의 원소의 capacity를 바꾼다. (모든걸 스왑)
- v1의 capacity를 없앨 때 (할당한 메모리를 프로그램이 끝나기 전에 없애고 싶을때) 사용하기도 한다.
- v2를 capacity가 0인 임시 객체로 만들어 스왑한다.
- ex) vector<int>().swap(v1);
- v.insert(2,3,4)
- 2번째 위치에 3개의 4값을 삽입한다. (뒤에 있는 값들은 뒤로 밀린다.)
- v.insert(2,3)
- 2번째 위치에 3의 값을 삽입한다.
- 삽입한 곳의 iterator를 반환한다.
- v.erase(iterator)
- iterator가 가리키는 원소를 제거한다.
- size만 줄어들고 capacity(할당된 메모리)는 그대로 남는다.
- erase는 파라미터 하나를 받을 때와 두개를 받을 때 다르다.
- v.empty()
- vector가 비어있으면 리턴 true
- 비어있는 기준은 size이며, capacity와는 상관이 없다.
'🔊 Language > C++' 카테고리의 다른 글
C++ - Map (0) | 2024.08.01 |
---|---|
C++ - STL 컨테이너 (0) | 2024.07.31 |
C++ - Stack (0) | 2024.07.29 |
C++ - 우분투에서 Boost Library 설치하기 (0) | 2024.07.19 |
C++ - 표준 템플릿 라이브러리(STL) (0) | 2024.07.18 |