std:: vector<bool>
|
헤더에 정의됨
<vector>
|
||
|
template
<
class
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
|
|
||||
const_iterator
|
|
||||
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 멤버 함수)
|
|
|
(C++23)
|
컨테이너에 값들의 범위를 할당합니다
(
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 멤버 함수)
|
|
반복자 |
|
|
(C++11)
|
시작 부분에 대한 반복자를 반환합니다
(
std::vector<T,Allocator>
의 public 멤버 함수)
|
|
(C++11)
|
끝을 가리키는 반복자를 반환합니다
(
std::vector<T,Allocator>
의 public 멤버 함수)
|
|
(C++11)
|
시작 부분으로의 역방향 반복자를 반환합니다
(
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)
|
|
|
(C++23)
|
요소들의 범위를 삽입합니다
(
std::vector<T,Allocator>
의 public member function)
|
|
(C++23)
|
끝에 요소들의 범위를 추가합니다
(
std::vector<T,Allocator>
의 public member function)
|
|
(C++11)
|
제자리에서 요소를 생성
(
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 member function)
|
|
|
저장된 요소의 개수를 변경합니다
(
std::vector<T,Allocator>
의 public 멤버 함수)
|
|
|
내용을 교환합니다
(
std::vector<T,Allocator>
의 public member function)
|
|
|
|
|
모든 비트를 반전시킴
(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
알고리즘을 특수화합니다
(함수 템플릿) |
|
|
특정 조건을 만족하는 모든 요소를 삭제합니다
(함수 템플릿) |
헬퍼 클래스
|
(C++11)
|
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
멤버 함수가 누락됨
|
추가됨 |