std::vector
| ヘッダ <vector> で定義
|
||
template< class T, class Allocator = std::allocator<T> > class vector; |
(1) | |
namespace pmr { template <class T> using vector = std::vector<T, std::pmr::polymorphic_allocator<T>>; } |
(2) | (C++17以上) |
std::vector は動的なサイズの配列をカプセル化するシーケンスコンテナです。|
要素は隣接して格納されます。 つまり要素はイテレータを通してだけでなく、要素に対する普通のポインタにオフセットを加えて使うことでもアクセスできます。 つまり vector の要素へのポインタは配列の要素へのポインタを期待する任意の関数に渡すことができます。 |
(C++03以上) |
vector の記憶域は自動的に処理され、必要に応じて拡張されたり縮小されたりします。 vector は通常、将来の伸びを処理するため多めにメモリを確保するため、静的な配列よりも多くの空間を占めます。 これにより vector は、要素を挿入するたびに再確保する必要がなくなり、追加のメモリを使い果たした場合にだけ再確保すれば良くなります。 確保されたメモリの合計量は capacity() 関数を使って問い合わせることができます。 shrink_to_fit() を呼ぶと余分なメモリをシステムに返却できます。 (C++11以上)
再確保は通常、性能面でコストの高い操作です。 事前に要素の数がわかっている場合は、再確保をなくすために reserve() 関数を使うことができます。
vector の一般的な操作の計算量 (効率性) は以下の通りです。
- ランダムアクセス - 定数時間 O(1)
- 末尾への要素の挿入または削除 - 償却定数時間 O(1)
- 要素の挿入または削除 - vector の終端までの距離に応じた線形時間 O(n)
(bool 以外の T に対して) std::vector は Container, AllocatorAwareContainer, SequenceContainer , ContiguousContainer (C++17以上), ReversibleContainer の要件を満たします。
テンプレート引数
| T | - | 要素の型。
| ||||||
| Allocator | - | メモリを確保/解放したり、そのメモリに要素を構築/破棄したりするために使用されるアロケータ。 この型は Allocator の要件を満たさなければなりません。 Allocator::value_type と T が同じでない場合、動作は未定義です。
|
特殊化
標準ライブラリは bool 型に対する std::vector の特殊化を提供しています。 この特殊化は空間効率に最適化されています。
| 空間効率の良い動的なビット集合 (クラステンプレートの特殊化) |
イテレータの無効化
| This section is incomplete |
この節は不正確な点がまだいくつかあります。 詳細は個別のメンバ関数のページを参照してください。
| 操作 | 無効化 |
|---|---|
| すべての読み取り操作および swap, std::swap | 決して無効化されません |
| clear, operator=, assign | 常に無効化されます |
| reserve, shrink_to_fit | vector の容量が変更された場合はすべて無効化されます。 そうでなければ無効化されません。 |
| erase | 削除された要素およびそれより後の要素すべて (end() を含む) 無効化されます。 |
| push_back, emplace_back | vector の容量が変更された場合はすべて無効化されます。 そうでなければ end() だけが無効化されます。 |
| insert, emplace, resize | vector の容量が変更された場合はすべて無効化されます。 そうでなければ挿入点より後のみ無効化されます。 |
| pop_back | 削除された要素および end() が無効化されます。 |
メンバ型
| メンバ型 | 定義 | ||||
value_type
|
T
| ||||
allocator_type
|
Allocator
| ||||
size_type
|
符号なし整数型 (通常 std::size_t) | ||||
difference_type
|
符号付き整数型 (通常 std::ptrdiff_t) | ||||
reference
|
| ||||
const_reference
|
| ||||
pointer
|
| ||||
const_pointer
|
| ||||
iterator
|
LegacyRandomAccessIterator | ||||
const_iterator
|
const LegacyRandomAccessIterator | ||||
reverse_iterator
|
std::reverse_iterator<iterator>
| ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator>
|
メンバ関数
vector を構築します (パブリックメンバ関数) | |
vector を破棄します (パブリックメンバ関数) | |
| コンテナに値を代入します (パブリックメンバ関数) | |
| コンテナに値を代入します (パブリックメンバ関数) | |
| 関連付けられているアロケータを返します (パブリックメンバ関数) | |
要素アクセス | |
| 境界チェック付きで指定された要素にアクセスします (パブリックメンバ関数) | |
| 指定された要素にアクセスします (パブリックメンバ関数) | |
| 最初の要素にアクセスします (パブリックメンバ関数) | |
| 最後の要素にアクセスします (パブリックメンバ関数) | |
(C++11) |
ベースとなる配列への直接アクセス (パブリックメンバ関数) |
イテレータ | |
| 先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 終端を指すイテレータを返します (パブリックメンバ関数) | |
| 先頭を指す逆イテレータを返します (パブリックメンバ関数) | |
| 終端を指す逆イテレータを返します (パブリックメンバ関数) | |
容量 | |
| コンテナが空かどうか調べます (パブリックメンバ関数) | |
| 要素数を返します (パブリックメンバ関数) | |
| 可能な最大の要素数を返します (パブリックメンバ関数) | |
| 記憶域を予約します (パブリックメンバ関数) | |
| 現在確保されている記憶域に保持できる要素の数を返します (パブリックメンバ関数) | |
(C++11) |
未使用のメモリを解放してメモリ使用量を減らします (パブリックメンバ関数) |
変更 | |
| すべての要素を削除します (パブリックメンバ関数) | |
| 要素を挿入します (パブリックメンバ関数) | |
(C++11) |
要素をその場で構築します (パブリックメンバ関数) |
| 要素を削除します (パブリックメンバ関数) | |
| 要素を末尾に追加します (パブリックメンバ関数) | |
(C++11) |
要素を末尾にその場で構築します (パブリックメンバ関数) |
| 最後の要素を削除します (パブリックメンバ関数) | |
| 格納されている要素の数を変更します (パブリックメンバ関数) | |
(C++11) |
内容を入れ替えます (パブリックメンバ関数) |
非メンバ関数
(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20) |
vector 内の値を辞書的に比較します (関数テンプレート) |
| std::swap アルゴリズムの特殊化 (関数テンプレート) | |
| 特定の基準を満たすすべての要素を削除します (関数テンプレート) |
推定ガイド(C++17以上)
例
#include <iostream>
#include <vector>
int main()
{
// Create a vector containing integers
std::vector<int> v = {7, 5, 16, 8};
// Add two more integers to vector
v.push_back(25);
v.push_back(13);
// Iterate and print values of vector
for(int n : v) {
std::cout << n << '\n';
}
}
出力:
7
5
16
8
25
13