std::vector<bool>
| ヘッダー <vector> で定義 |
||
| template< class Allocator |
||
std::vector<bool> は、型 bool のための、スペース効率が良い可能性のある std::vector の特殊化です。
std::vector<bool> がどのようにスペース効率を良くしているか(そして最適化されているかどうか)は、実装定義です。考えられる最適化の 1 つに、各要素が sizeof(bool) バイトではなく 1 ビットを占めるように、ベクター要素を凝縮することが含まれます。
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 メンバー関数) | |
vector を破棄します( std::vector<T,Allocator> の public メンバー関数) | |
| コンテナに値を代入する ( std::vector<T,Allocator> の public メンバー関数) | |
| コンテナに値を代入する ( std::vector<T,Allocator> の public メンバー関数) | |
| (C++23) |
コンテナに値の範囲を代入する ( 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 メンバー関数) | |
イテレータ | |
| (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 メンバー関数) | |
| 要素数を返す ( 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++23) |
要素の範囲を挿入する ( std::vector<T,Allocator> の public メンバー関数) |
| (C++23) |
末尾に要素の範囲を追加する ( std::vector<T,Allocator> の public メンバー関数) |
| (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 メンバー関数) | |
| 格納されている要素の数を変更する ( std::vector<T,Allocator> の public メンバー関数) | |
| 内容を交換する ( std::vector<T,Allocator> の public メンバー関数) | |
| |
| すべてのビットを反転します (public メンバー関数) | |
| [static] |
2 つの std::vector<bool>:: reference を交換します(public static メンバー関数) |
[編集] 非メンバー関数
| (C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20) |
2つの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 の要件を満たさない可能性があります。std::search のような LegacyForwardIterator を必要とするアルゴリズムの使用は、コンパイル時または実行時エラーにつながる可能性があります。
Boost.Container 版の `vector` は、bool のために特殊化されていません。
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | コンテナのRangeコンストラクタとRange挿入 |
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2187 | C++11 | bool の特殊化には `emplace` および `emplace_back` メンバー関数が欠けていました |
追加された |