std:: vector
|
ヘッダーで定義
<vector>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (C++17以降) |
std::vector
は動的サイズ配列をカプセル化するシーケンスコンテナです。
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のすべてのメンバー関数は
std::vector
である
constexpr
:定数式の評価において
std::vector
オブジェクトを作成および使用することが可能です。
しかしながら、
|
(C++20以降) |
目次 |
テンプレートパラメータ
| T | - |
要素の型。
|
||||||||||||||
| アロケータ | - |
メモリの取得/解放およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は
Allocator
の要件を満たさなければならない。
動作は未定義
(C++20まで)
プログラムは不適格
(C++20から)
(
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
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
メンバー関数
vector
を構築する
(公開メンバ関数) |
|
vector
を破棄する
(公開メンバ関数) |
|
|
コンテナに値を代入する
(公開メンバ関数) |
|
|
コンテナに値を割り当てる
(公開メンバ関数) |
|
|
(C++23)
|
コンテナに値の範囲を割り当てる
(公開メンバ関数) |
|
関連付けられたアロケータを返す
(公開メンバ関数) |
|
要素アクセス |
|
|
境界チェック付きで指定された要素にアクセス
(公開メンバ関数) |
|
|
指定された要素にアクセス
(公開メンバ関数) |
|
|
最初の要素にアクセスする
(公開メンバ関数) |
|
|
最後の要素にアクセスする
(公開メンバ関数) |
|
|
基となる連続ストレージへの直接アクセス
(公開メンバー関数) |
|
イテレータ |
|
|
(C++11)
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
終端へのイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
先頭への逆イテレータを返す
(公開メンバ関数) |
|
(C++11)
|
末尾を指す逆イテレータを返す
(公開メンバ関数) |
容量 |
|
|
コンテナが空かどうかをチェックする
(public member function) |
|
|
要素数を返す
(公開メンバ関数) |
|
|
要素の最大可能数を返す
(public member function) |
|
|
ストレージを予約する
(公開メンバ関数) |
|
|
現在割り当てられているストレージに保持可能な要素数を返す
(公開メンバ関数) |
|
|
(
DR*
)
|
未使用のメモリを解放してメモリ使用量を削減する
(public member function) |
修飾子 |
|
|
内容をクリアする
(公開メンバ関数) |
|
|
要素を挿入する
(公開メンバ関数) |
|
|
(C++23)
|
要素の範囲を挿入する
(公開メンバ関数) |
|
(C++11)
|
要素をその場で構築する
(公開メンバ関数) |
|
要素を削除する
(公開メンバ関数) |
|
|
末尾に要素を追加する
(公開メンバ関数) |
|
|
(C++11)
|
要素をその場で末尾に構築する
(公開メンバ関数) |
|
(C++23)
|
末尾に要素の範囲を追加する
(公開メンバ関数) |
|
最後の要素を削除する
(公開メンバ関数) |
|
|
格納されている要素数を変更する
(公開メンバ関数) |
|
|
内容を交換する
(公開メンバ関数) |
|
非メンバー関数
|
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20で削除)
(C++20)
|
2つの
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
への変更
|
例
出力:
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++26)
|
サイズ変更可能、固定容量、インプレース連続配列
(クラステンプレート) |
|
(C++11)
|
固定サイズのインプレース連続配列
(クラステンプレート) |
|
両端キュー
(クラステンプレート) |