名前空間
変種
操作

std::vector<bool>

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダー <vector> で定義
template<

    class Allocator

> class vector<bool, 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

実装定義

(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 メンバー関数) [編集]
vector を破棄します
(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 member function) [編集]
最初の要素にアクセスする
(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 メンバー関数) [編集]
要素数を返す
(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++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 メンバー関数) [編集]
vector<bool> 固有の修飾子
すべてのビットを反転します
(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 アルゴリズムを特殊化する
(関数テンプレート) [編集]
特定の基準を満たすすべての要素を削除する
(関数テンプレート) [編集]

[編集] ヘルパークラス

std::vector<bool> のハッシュサポート
(クラステンプレートの特殊化) [編集]

[編集] 推論ガイド (C++17)

[編集] 注記

ビットセットのサイズがコンパイル時にわかっている場合は、より豊富なメンバー関数を提供する std::bitset を使用できます。さらに、boost::dynamic_bitsetstd::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` メンバー関数が欠けていました 追加された
English 日本語 中文(简体) 中文(繁體)