std:: vector
|
헤더 파일에 정의됨
<vector>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (C++17부터) |
std::vector
는 동적 크기 배열을 캡슐화하는 시퀀스 컨테이너입니다.
std::vector<bool>
부분 특수화를 제외하고, 요소들은 연속적으로 저장됩니다. 이는 요소들이 반복자를 통해서뿐만 아니라 일반 포인터 오프셋을 사용해서도 접근할 수 있음을 의미합니다. 즉, 벡터 요소에 대한 포인터를 배열 요소에 대한 포인터를 기대하는 어떤 함수에도 전달할 수 있습니다.
벡터의 저장소는 자동으로 처리되며 필요에 따라 확장됩니다. 벡터는 일반적으로 정적 배열보다 더 많은 공간을 차지하는데, 이는 향후 성장을 처리하기 위해 더 많은 메모리가 할당되기 때문입니다. 이렇게 하면 요소가 삽입될 때마다 재할당할 필요가 없으며 추가 메모리가 고갈되었을 때만 재할당이 발생합니다. 할당된 메모리의 총량은 capacity() 함수를 사용하여 조회할 수 있습니다. shrink_to_fit() [1] 호출을 통해 추가 메모리를 시스템에 반환할 수 있습니다.
재할당은 일반적으로 성능 측면에서 비용이 많이 드는 작업입니다. reserve() 함수는 요소의 개수를 미리 알고 있는 경우 재할당을 제거하는 데 사용할 수 있습니다.
벡터에서 일반적인 연산의 복잡도(효율성)는 다음과 같습니다:
- 임의 접근 - 상수 시간 𝓞(1) .
- 끝에서의 요소 삽입 또는 제거 - 분할 상환 상수 시간 𝓞(1) .
- 요소 삽입 또는 제거 - 벡터 끝까지의 거리에 선형 비례 𝓞(n) .
std::vector
(
T
가
bool
이외의 타입일 경우)
Container
,
AllocatorAwareContainer
(C++11부터)
,
SequenceContainer
,
ContiguousContainer
(C++17부터)
그리고
ReversibleContainer
요구 사항을 충족합니다.
std::vector
의 모든 멤버 함수는
constexpr
입니다: 상수 표현식 평가에서
std::vector
객체를 생성하고 사용하는 것이 가능합니다.
그러나
|
(C++20부터) |
-
↑
libstdc++에서,
shrink_to_fit()함수는 C++98 모드에서 사용할 수 없습니다 .
목차 |
템플릿 매개변수
| T | - |
요소의 타입.
|
||||||||||||||
| Allocator | - |
메모리를 획득/해제하고 해당 메모리에서 요소를 생성/소멸시키는 데 사용되는 할당자. 이 타입은
Allocator
요구사항을 충족해야 합니다.
정의되지 않은 동작
(C++20 이전)
프로그램이 ill-formed
(C++20 이후)
if
Allocator::value_type
이
T
와 동일하지 않은 경우.
|
특수화
표준 라이브러리는 공간 효율성을 위해 최적화될 수 있는
std::vector
의
bool
타입에 대한 특수화를 제공합니다.
|
공간 효율적인 동적 비트셋
(클래스 템플릿 특수화) |
반복자 무효화
| 연산 | 무효화 대상 |
|---|---|
| 모든 읽기 전용 연산 | 절대 없음. |
| swap , std::swap | end() |
| clear , operator= , assign | 항상 모두. |
| reserve , shrink_to_fit | 벡터의 용량이 변경된 경우 모두 무효화. 변경되지 않은 경우 없음. |
| erase | 삭제된 요소와 그 이후의 모든 요소 ( end() 포함). |
| push_back , emplace_back | 벡터의 용량이 변경된 경우 모두 무효화. 변경되지 않은 경우 end() 만 무효화. |
| insert , emplace |
벡터의 용량이 변경된 경우 모두 무효화.
변경되지 않은 경우 삽입 지점과 그 이후의 요소들만 무효화 ( end() 포함). |
| resize | 벡터의 용량이 변경된 경우 모두 무효화. 변경되지 않은 경우 end() 와 삭제된 요소들만 무효화. |
| pop_back | 삭제된 요소와 end() . |
멤버 타입
| 멤버 타입 | 정의 | ||||
value_type
|
T
|
||||
allocator_type
|
Allocator
|
||||
size_type
|
부호 없는 정수 타입 (일반적으로 std::size_t ) | ||||
difference_type
|
부호 있는 정수 타입 (일반적으로 std::ptrdiff_t ) | ||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
멤버 함수
vector
를 생성합니다
(public member function) |
|
vector
를 소멸시킵니다
(public member function) |
|
|
컨테이너에 값을 할당합니다
(public member function) |
|
|
컨테이너에 값을 할당합니다
(public member function) |
|
|
(C++23)
|
컨테이너에 값들의 범위를 할당합니다
(public member function) |
|
관련 할당자 반환
(public member function) |
|
요소 접근 |
|
|
범위 검사와 함께 지정된 요소에 접근
(public member function) |
|
|
지정된 요소에 접근
(public member function) |
|
|
첫 번째 요소에 접근
(public member function) |
|
|
마지막 요소에 접근
(public member function) |
|
|
연속적인 저장 공간에 대한 직접 접근
(public member function) |
|
반복자 |
|
|
(C++11)
|
시작 부분에 대한 반복자를 반환합니다
(public member function) |
|
(C++11)
|
끝을 가리키는 반복자를 반환합니다
(public member function) |
|
(C++11)
|
역방향 반복자를 시작 부분에 반환합니다
(public member function) |
|
(C++11)
|
역방향 반복자를 끝 위치로 반환합니다
(public member function) |
용량 |
|
|
컨테이너가 비어 있는지 확인합니다
(public member function) |
|
|
요소의 개수를 반환합니다
(public member function) |
|
|
가능한 최대 요소 개수를 반환합니다
(public member function) |
|
|
저장 공간 예약
(public member function) |
|
|
현재 할당된 저장 공간에 보관할 수 있는 요소의 개수를 반환합니다
(public member function) |
|
|
(
DR*
)
|
사용하지 않는 메모리를 해제하여 메모리 사용량을 줄임
(public member function) |
수정자 |
|
|
내용을 지움
(public member function) |
|
|
요소 삽입
(public member function) |
|
|
(C++23)
|
요소 범위를 삽입합니다
(public member function) |
|
(C++11)
|
제자리에서 요소를 생성합니다
(public member function) |
|
요소를 삭제합니다
(public member function) |
|
|
요소를 끝에 추가합니다
(public member function) |
|
|
(C++11)
|
끝에서 제자리에 요소를 생성합니다
(public member function) |
|
(C++23)
|
끝에 요소들의 범위를 추가합니다
(public member function) |
|
마지막 요소를 제거합니다
(public member function) |
|
|
저장된 요소의 개수를 변경합니다
(public member function) |
|
|
내용을 교환합니다
(public member function) |
|
비멤버 함수
|
(C++20에서 제거됨)
(C++20에서 제거됨)
(C++20에서 제거됨)
(C++20에서 제거됨)
(C++20에서 제거됨)
(C++20)
|
두
vector
의 값을 사전식으로 비교
(함수 템플릿) |
|
std::swap
알고리즘을 특수화
(함수 템플릿) |
|
|
특정 조건을 만족하는 모든 요소를 삭제
(함수 템플릿) |
추론 가이드 |
(C++17부터) |
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | 컨테이너를 위한 범위 생성 및 삽입 |
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
,
ranges::reserve_hint
, 및
std::vector
변경사항
|
예제
출력:
8 4 -1 9 6 9
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 69 | C++98 |
vector
요소들의 저장 공간 연속성이 요구되지 않음
|
요구됨 |
| LWG 230 | C++98 |
T
가
CopyConstructible
일 필요가 없었음
(
T
타입의 요소가 생성되지 않을 수 있었음)
|
T
가
CopyConstructible
이어야 함
|
| LWG 464 | C++98 |
빈
vector
의 기반 저장 공간에 접근 시 미정의 동작 발생
|
data
함수 제공
|
참고 항목
|
(C++26)
|
크기 조정 가능, 고정 용량, 인플레이스 연속 배열
(클래스 템플릿) |
|
(C++11)
|
고정 크기 인플레이스 연속 배열
(클래스 템플릿) |
|
양방향 큐
(클래스 템플릿) |