vector 컨테이너는 대표적인 시퀀스 컨테이너로 배열과 비슷하여 사용이 쉬우므로 자주 사용된다
vector의 주요 인터페이스와 특징
vector의 주요 기능
- vector는 시퀀스 컨테이너이므로 원소의 저장 위치(순서)가 정해지며 배열 기반 컨테이너이므로 원소가 하나의 메모리 블록에 할당된다
- 시퀀스 컨테이너는 차례차례 원소를 추가하고 제거하는 push_back()과 pop_back()을 가지며, 첫 원소와 마지막 원소를 참조하는 front()와 back()을 가진다.
- 또한, 지정한 위치에 원소를 삽입할 수 있는 insert()를 가진다.
- vector는 앞쪽이 막혀 있는 형태로 앞쪽에는 원소를 추가/제거할 수 없으며 뒤쪽에만 추가/제거 할 수 있다.
- 다른 시퀀스 컨테이너 (list, deque)는 앞쪽에 원소를 추가/제거할 수 있는 push_front()와 pop_front()를 가진다.
std::vector<int> v; // int 형식의 원소를 저장하는 컨테이너 v를 생성
==> using namespace std;를 써주면 std를 생략할 수 있다
vector의 주요 특징 정리
- vector는 임의 접근 반복자를 지원하는 배열 기반 컨테이너이다
- vector의 가장 큰 특징 중 하나는 원소가 하나의 메모리 블록에 연속(배열 기반 컨테이너)하게 저장되는 것이다
- 그렇다 보니 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 비용을 지불하게 된다.
- 그래서 메모리 할당 크기를 알 수 있게 capacity() 멤버 함수를 제공하며, 한 번에 메모리를 예약(할당)하고 사용할 수 있는 reserve() 멤버 함수를 제공한다.
- 원소가 연속하게 저장되므로 원소에 접근하는 at()이나 v[i] 등의 연산은 속도가 빠르지만 insert(), erase(), push_back() 등이 빈번하게 호출되어야 하는 프로그램이라면 다른 컨테이너의 선택을 고려해야 한다.
- 또한, vector는 시퀀스 기반 컨테이너이다.
- 시퀀스 기반 컨테이너는 원소가 서로 상대적인 위치(순서)를 유지하므로 가장 앞 요소와 가장 뒤 요소를 참조하는 front(), back() 멤버 함수를 제공하며 컨테이너 끝에 추가하고 제거하는 push_back(), pop_back() 멤버 함수를 제공한다.
- vector가 시퀀스 기반 컨테이너지만 배열 기반 컨테이너이므로 push_front()와 pop_front() 멤버 함수는 제공하지 않는다.
- 이 두 멤버 함수는 vector에서 매우 비효율적으로 동작하기 때문이다.
- 마지막으로 vector는 연속한 원소를 index 정수로 빠르게 접근하도록 at()과 [ ] 연산자를 제공한다.
- at()과 [ ] 연산자는 같은 기능을 수행하지만, at()은 유효 범위를 점검하여 안전하게 원소에 접근하도록 하며, [ ] 연산자는 유효 범위를 점검하지 않아 원소 접근 속도를 조금 더 높인다
'C++ > 뇌를 자극하는 C++ STL' 카테고리의 다른 글
3. list 컨테이너 (0) | 2023.04.23 |
---|---|
2. deque 컨테이너 (0) | 2023.04.23 |
2. STL을 한눈에 (0) | 2023.04.23 |
1. STL이란 (0) | 2023.04.23 |