개요
vector는 동적 크기 조정이 가능한 연속적인 메모리 블록을 제공하는 STL 컨테이너이다. (템플릿 사용 가능)
동적 할당을 통해 크기를 유연하게 조정할 수 있다는 점이 가장 큰 장점이다.
vector에는 size와 capacity가 따로 존재한다.
size()는 현재 저장된 요소의 개수, capacity()는 재할당 없이 수용 가능한 최대 개수를 의미한다.

push_back()을 호출하면 현재 size() 위치에 새로운 값을 추가하고,
size()가 capacity()를 초과하면 새로운 메모리를 할당하고 기존 데이터를 복사한 후 추가된다.
만약 size가 capacity 보다 커진다면 현재 capacity의 1.5배 또는 2배(구현 마다 다를 수 있음)를 늘린 크기의 새로운 메모리를 할당하여 원래의 데이터들을 복사한다.
이렇게 이동하는 재할당 과정은 부하가 있기 때문에 만약에 벡터에 들어가는 데이터의 수를 예측 가능하다면 reserve또는 생성자를 통해 미리 공간을 확보해 놓는 것이 좋다.
주요 메서드
벡터의 기본 정보 조회
| 메서드 | 설명 |
| size() | 현재 저장된 요소 개수 반환 |
| capacity() | 현재 할당된 메모리 크기 반환 |
| empty() | 벡터가 비어있는지 확인 (true 또는 false 반환) |
벡터 원소 접근
| 메서드 | 설명 |
| at(i) | i번째 요소 반환 |
| operator[] | i번째 요소 반환 |
| front() | 첫 번째 요소 반환 |
| back() | 마지막 요소 반환 |
벡터 원소 추가 및 삭제
| 메서드 | 설명 |
| push_back(val) | 마지막 위치에 val 추가 |
| pop_back() | 마지막 원소 삭제 |
| insert(it, val) | it 위치에 val 삽입 |
| erase(it) | it 위치의 요소 삭제 |
| erase(it1, it2) | 범위 [it1, it2)의 요소 삭제 |
| clear() | 모든 요소 삭제 |
벡터 크기 조절
| 메서드 | 설명 |
| resize(n) | 벡터 크기를 n으로 조정 |
| resize(n, val) | 크기 n으로 늘리며 val로 초기화 |
| reserve(n) | capacity()를 n 이상으로 증가 |
Iterator 관련
| 메서드 | 설명 |
| begin() | 첫 번째 원소를 가리키는 반복자 반환 |
| end() | 마지막 원소 다음을 가리키는 반복자 반환 |
| rbegin() | 역순 첫 번째 원소 반환 |
| rend() | 역순 마지막 원소 다음을 가리키는 반복자 반환 |
정렬 및 탐색 관련
| 메서드 | 설명 |
| sort(begin, end) | 오름차순 정렬 |
| find(begin, end, val) | val 찾기 (iterator반환) |
| binary_search(begin, end, val) | 이진 탐색 (bool 반환) |
뻔한 말이지만 메서드를 전부 외우려 하기 보다는 원리를 이해하는 것이 좋다.