Namespaces
Variants

std:: vector<bool>

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

class Allocator

> class vector < bool , Allocator > ;

std :: vector < bool > std::vector bool 타입에 대한 공간 효율성이 있을 수 있는 특수화입니다.

std :: vector < bool > 가 공간 효율적으로 구현되는 방식(또는 최적화가 전혀 이루어지는지 여부)은 구현체 정의입니다. 한 가지 잠재적 최적화는 벡터 요소들을 통합하여 각 요소가 sizeof ( bool ) 바이트 대신 단일 비트를 차지하도록 하는 것입니다.

std :: vector < bool > std::vector 와 유사하게 동작하지만, 공간 효율성을 위해 다음과 같은 특징을 가집니다:

  • 요소들을 반드시 연속적인 배열로 저장하지 않습니다.
  • 개별 비트에 접근하는 방법으로 std :: vector < bool > :: reference 클래스를 노출합니다. 특히 이 클래스의 객체들은 operator[] 에 의해 값으로 반환됩니다.
  • 비트 값을 생성하기 위해 std :: allocator_traits :: construct 를 사용하지 않습니다.
  • 동일한 컨테이너 내의 서로 다른 요소들이 서로 다른 스레드에 의해 동시에 수정될 수 있다는 것을 보장하지 않습니다.

목차

멤버 타입

멤버 타입 정의
value_type bool
allocator_type Allocator
size_type 구현 시 정의됨
difference_type 구현 시 정의됨
단일 bool 에 대한 참조를 나타내는 프록시 클래스
(클래스)
const_reference bool
pointer 구현 시 정의됨
const_pointer 구현 시 정의됨
iterator

구현 시 정의됨

(C++20 이전)

구현 시 정의됨 ConstexprIterator

(C++20 이후)
const_iterator

구현 시 정의됨

(C++20 이전)

구현 시 정의됨 ConstexprIterator

(C++20 이후)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

멤버 함수

vector 를 생성한다
( std::vector<T,Allocator> 의 public member function)
vector 를 소멸시킵니다
( std::vector<T,Allocator> public member function )
컨테이너에 값을 할당합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
컨테이너에 값을 할당합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
컨테이너에 값들의 범위를 할당합니다
( std::vector<T,Allocator> 의 public member function)
관련 할당자 반환
( std::vector<T,Allocator> 의 public 멤버 함수)
요소 접근
범위 검사와 함께 지정된 요소에 접근
( std::vector<T,Allocator> 의 public 멤버 함수)
지정된 요소에 접근
( std::vector<T,Allocator> 의 public 멤버 함수)
첫 번째 요소에 접근
( std::vector<T,Allocator> 의 public 멤버 함수)
마지막 요소에 접근
( std::vector<T,Allocator> 의 public 멤버 함수)
반복자
시작 부분에 대한 반복자를 반환합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
(C++11)
끝을 가리키는 반복자를 반환합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
시작 부분으로의 역방향 반복자를 반환합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
(C++11)
역방향 반복자를 끝 위치로 반환합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
용량
컨테이너가 비어 있는지 확인합니다
( std::vector<T,Allocator> 의 public member function)
요소의 개수를 반환합니다
( std::vector<T,Allocator> 의 public member function)
가능한 최대 요소 개수를 반환합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
저장소 예약
( std::vector<T,Allocator> 의 public member function)
현재 할당된 저장 공간에 보관할 수 있는 요소의 개수를 반환합니다
( std::vector<T,Allocator> 의 public member function)
수정자
내용을 지움
( std::vector<T,Allocator> 의 public 멤버 함수)
요소를 삽입합니다
( std::vector<T,Allocator> 의 public member function)
요소들의 범위를 삽입합니다
( std::vector<T,Allocator> 의 public member function)
끝에 요소들의 범위를 추가합니다
( std::vector<T,Allocator> 의 public member function)
(C++11)
제자리에서 요소를 생성
( std::vector<T,Allocator> 의 public 멤버 함수)
요소를 삭제함
( std::vector<T,Allocator> 의 public 멤버 함수)
끝에 요소를 추가합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
끝에서 제자리에 요소를 생성합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
마지막 요소를 제거합니다
( std::vector<T,Allocator> 의 public member function)
저장된 요소의 개수를 변경합니다
( std::vector<T,Allocator> 의 public 멤버 함수)
내용을 교환합니다
( std::vector<T,Allocator> 의 public member function)
vector<bool> 전용 수정자
모든 비트를 반전시킴
(public member function)
[static]
두 개의 std::vector<bool>:: reference 를 교환
(public static member function)

비멤버 함수

(C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
vector 의 값을 사전식으로 비교합니다
(함수 템플릿)
std::swap 알고리즘을 특수화합니다
(함수 템플릿)
특정 조건을 만족하는 모든 요소를 삭제합니다
(함수 템플릿)

헬퍼 클래스

std :: vector < bool > 에 대한 해시 지원
(클래스 템플릿 특수화)

추론 가이드 (C++17)

참고 사항

비트셋의 크기가 컴파일 타임에 알려진 경우, std::bitset 을 사용할 수 있으며, 이는 더 풍부한 멤버 함수 집합을 제공합니다. 또한 boost::dynamic_bitset std :: vector < bool > 에 대한 대안으로 존재합니다.

그 표현 방식이 최적화될 수 있기 때문에, std :: vector < bool > 는 모든 Container 또는 SequenceContainer 요구 사항을 반드시 충족하지는 않습니다. 예를 들어, std :: vector < bool > :: iterator 는 구현에 따라 정의되므로 LegacyForwardIterator 요구 사항을 충족하지 않을 수 있습니다. LegacyForwardIterator s 를 요구하는 std::search 와 같은 알고리즘을 사용하면 컴파일 타임 또는 런타임 오류가 발생할 수 있습니다 .

Boost.Container 버전의 vector bool 에 대해 특수화되지 않았습니다.

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 컨테이너를 위한 범위 생성 및 삽입

예제

#include <cassert>
#include <initializer_list>
#include <iostream>
#include <vector>
void println(auto rem, const std::vector<bool>& vb)
{
    std::cout << rem << " = [";
    for (std::size_t t{}; t != vb.size(); ++t)
        std::cout << (t ? ", " : "") << vb[t];
    std::cout << "]\n";
}
int main()
{
    std::vector<bool> v1; // 빈 bool 값 벡터 생성
    println("1) v1", v1);
    std::vector<bool> v2{0, 1, 1, 0, 1}; // 값이 채워진 벡터 생성
    println("2) v2", v2);
    v1 = v2; // v2를 v1에 복사
    println("3) v1", v1);
    assert(v1.size() == v2.size()); // v1과 v2의 크기가 같은지 확인
    assert(v1.front() == false); // 첫 번째 요소 접근, 다음과 동일:
    assert(v1[0] == false);
    assert(v1.back() == true); // 마지막 요소 접근, 다음과 동일:
    assert(v1[v1.size() - 1] == true);
    v1 = {true, true, false, false}; // 초기화 리스트 할당
    println("4) v1", v1);
    v1.push_back(true); // 끝에 하나의 요소 추가
    println("5) v1", v1);
    v1.pop_back(); // 끝에서 하나의 요소 제거
    println("6) v1", v1);
    v1.flip(); // 모든 요소 반전
    println("7) v1", v1);
    v1.resize(8, true); // v1 크기 조정; 새로운 요소는 "true"로 설정
    println("8) v1", v1);
    v1.clear(); // v1 삭제
    assert(v1.empty()); // v1이 비어 있는지 확인
}

출력:

1) v1 = []
2) v2 = [0, 1, 1, 0, 1]
3) v1 = [0, 1, 1, 0, 1]
4) v1 = [1, 1, 0, 0]
5) v1 = [1, 1, 0, 0, 1]
6) v1 = [1, 1, 0, 0]
7) v1 = [0, 0, 1, 1]
8) v1 = [0, 0, 1, 1, 1, 1, 1, 1]

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2187 C++11 bool 특수화에서 emplace emplace_back 멤버 함수가 누락됨 추가됨