Namespaces
Variants

std:: vector

From cppreference.net
헤더 파일에 정의됨 <vector>
template <

class T,
class Allocator = std:: allocator < T >

> class vector ;
(1)
namespace pmr {

template < class T >
using vector = std :: vector < T, std:: pmr :: polymorphic_allocator < T >> ;

}
(2) (C++17부터)
1) std::vector 는 동적 크기 배열을 캡슐화하는 시퀀스 컨테이너입니다.
2) std::pmr::vector polymorphic allocator 를 사용하는 alias template입니다.

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 객체를 생성하고 사용하는 것이 가능합니다.

그러나 std::vector 객체는 일반적으로 constexpr 일 수 없습니다. 왜냐하면 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가에서 해제되어야 하기 때문입니다.

(C++20부터)
  1. libstdc++에서, shrink_to_fit() 함수는 C++98 모드에서 사용할 수 없습니다 .

목차

템플릿 매개변수

T - 요소의 타입.
T CopyAssignable CopyConstructible 요구사항을 충족해야 합니다. (C++11 이전)
요소에 부과되는 요구사항은 컨테이너에서 수행되는 실제 연산에 따라 다릅니다. 일반적으로 요소 타입이 완전한 타입이어야 하며 Erasable 요구사항을 충족해야 하지만, 많은 멤버 함수들은 더 엄격한 요구사항을 부과합니다. (C++11 이후)
(C++17 이전)

요소에 부과되는 요구사항은 컨테이너에서 수행되는 실제 연산에 따라 다릅니다. 일반적으로 요소 타입이 Erasable 요구사항을 충족해야 하지만, 많은 멤버 함수들은 더 엄격한 요구사항을 부과합니다. 할당자가 allocator completeness requirements 를 충족하는 경우, 이 컨테이너(그러나 그 멤버들은 아님)는 불완전한 요소 타입으로 인스턴스화될 수 있습니다.

Feature-test macro Value Std Feature
__cpp_lib_incomplete_container_elements 201505L (C++17) Minimal incomplete type support
(C++17 이후)

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

Allocator::pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: pointer

(C++11 이후)
const_pointer

Allocator::const_pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: const_pointer

(C++11 이후)
iterator

LegacyRandomAccessIterator 이면서 LegacyContiguousIterator value_type 반복자

(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 그리고 ConstexprIterator value_type 반복자

(C++20 이후)
const_iterator

LegacyRandomAccessIterator 이면서 LegacyContiguousIterator const value_type 반복자

(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 그리고 ConstexprIterator const value_type 반복자

(C++20 이후)
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)
컨테이너에 값들의 범위를 할당합니다
(public member function)
관련 할당자 반환
(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)
역방향 반복자를 시작 부분에 반환합니다
(public member function)
(C++11)
역방향 반복자를 끝 위치로 반환합니다
(public member function)
용량
컨테이너가 비어 있는지 확인합니다
(public member function)
요소의 개수를 반환합니다
(public member function)
가능한 최대 요소 개수를 반환합니다
(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)
요소를 삭제합니다
(public member function)
요소를 끝에 추가합니다
(public member function)
끝에서 제자리에 요소를 생성합니다
(public member function)
끝에 요소들의 범위를 추가합니다
(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 변경사항

예제

#include <iostream>
#include <vector>
int main()
{
    // 정수를 포함하는 벡터 생성
    std::vector<int> v = {8, 4, 5, 9};
    // 벡터에 두 개의 정수 추가
    v.push_back(6);
    v.push_back(9);
    // 위치 2의 요소 덮어쓰기
    v[2] = -1;
    // 벡터 출력
    for (int n : v)
        std::cout << n << ' ';
    std::cout << '\n';
}

출력:

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++11)
고정 크기 인플레이스 연속 배열
(클래스 템플릿)
양방향 큐
(클래스 템플릿)