名前空間
変種
操作

std::vector

提供: cppreference.com
< cpp‎ | container
ヘッダ <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およびそれ以降)
1) std::vector は動的なサイズの配列をカプセル化するシーケンスコンテナです。
2) std::pmr::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::vectorContainer, AllocatorAwareContainer, SequenceContainer , ContiguousContainer (C++17およびそれ以降), ReversibleContainer の要件を満たします。

目次

[編集] テンプレート引数

T - 要素の型。
TCopyAssignable および CopyConstructible の要件を満たさなければなりません。 (C++11以前)
要素に課される要件はコンテナに対して実際に行われる操作によります。 一般的には、要素型は完全型であることが要求され、 Erasable の要件を満たさなければなりませんが、使用するメンバ関数によってはさらに厳しい要件が課されます。 (C++11およびそれ以降)
(C++17以前)
要素に課される要件はコンテナに対して実際に行われる操作によります。 一般的には、要素型は Erasable の要件を満たさなければなりませんが、使用するメンバ関数によってはさらに厳しい要件が課されます。 アロケータがアロケータの完全性の要件を満たす場合、要素型が不完全でもこのコンテナを実体化できます (しかしそのメンバはできません)。 (C++17およびそれ以降)

[edit]

Allocator - メモリを確保/解放したり、そのメモリに要素を構築/破棄したりするために使用されるアロケータ。 この型は Allocator の要件を満たさなければなりません。 Allocator::value_typeT が同じでない場合、動作は未定義です。 [edit]

[編集] 特殊化

標準ライブラリは bool 型に対する std::vector の特殊化を提供しています。 この特殊化は空間効率に最適化されています。

空間効率の良い動的なビット集合
(クラステンプレートの特殊化) [edit]

[編集] イテレータの無効化

この節は不正確な点がまだいくつかあります。 詳細は個別のメンバ関数のページを参照してください。

操作 無効化
すべての読み取り操作および 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 [edit]
allocator_type Allocator [edit]
size_type 符号なし整数型 (通常 std::size_t) [edit]
difference_type 符号付き整数型 (通常 std::ptrdiff_t) [edit]
reference
Allocator::reference (C++11以前)
value_type& (C++11およびそれ以降)
[edit]
const_reference
Allocator::const_reference (C++11以前)
const value_type& (C++11およびそれ以降)
[edit]
pointer
Allocator::pointer (C++11以前)
std::allocator_traits<Allocator>::pointer (C++11およびそれ以降)
[edit]
const_pointer
Allocator::const_pointer (C++11以前)
std::allocator_traits<Allocator>::const_pointer (C++11およびそれ以降)
[edit]
iterator RandomAccessIterator [edit]
const_iterator const RandomAccessIterator [edit]
reverse_iterator std::reverse_iterator<iterator> [edit]
const_reverse_iterator std::reverse_iterator<const_iterator> [edit]

[編集] メンバ関数

vector を構築します
(パブリックメンバ関数) [edit]
vector を破棄します
(パブリックメンバ関数) [edit]
コンテナに値を代入します
(パブリックメンバ関数) [edit]
コンテナに値を代入します
(パブリックメンバ関数) [edit]
関連付けられているアロケータを返します
(パブリックメンバ関数) [edit]
要素アクセス
境界チェック付きで指定された要素にアクセスします
(パブリックメンバ関数) [edit]
指定された要素にアクセスします
(パブリックメンバ関数) [edit]
最初の要素にアクセスします
(パブリックメンバ関数) [edit]
最後の要素にアクセスします
(パブリックメンバ関数) [edit]
(C++11)
ベースとなる配列への直接アクセス
(パブリックメンバ関数) [edit]
イテレータ
先頭を指すイテレータを返します
(パブリックメンバ関数) [edit]
終端を指すイテレータを返します
(パブリックメンバ関数) [edit]
先頭を指す逆イテレータを返します
(パブリックメンバ関数) [edit]
終端を指す逆イテレータを返します
(パブリックメンバ関数) [edit]
容量
コンテナが空かどうか調べます
(パブリックメンバ関数) [edit]
要素数を返します
(パブリックメンバ関数) [edit]
可能な最大の要素数を返します
(パブリックメンバ関数) [edit]
記憶域を予約します
(パブリックメンバ関数) [edit]
現在確保されている記憶域に保持できる要素の数を返します
(パブリックメンバ関数) [edit]
未使用のメモリを解放してメモリ使用量を減らします
(パブリックメンバ関数) [edit]
変更
すべての要素を削除します
(パブリックメンバ関数) [edit]
要素を挿入します
(パブリックメンバ関数) [edit]
(C++11)
要素をその場で構築します
(パブリックメンバ関数) [edit]
要素を削除します
(パブリックメンバ関数) [edit]
要素を末尾に追加します
(パブリックメンバ関数) [edit]
要素を末尾にその場で構築します
(パブリックメンバ関数) [edit]
最後の要素を削除します
(パブリックメンバ関数) [edit]
格納されている要素の数を変更します
(パブリックメンバ関数) [edit]
内容を入れ替えます
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

vector 内の値を辞書的に比較します
(関数テンプレート) [edit]
std::swap アルゴリズムの特殊化
(関数テンプレート) [edit]

[編集] 推定ガイド(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