Namespaces
Variants

std::vector<T,Allocator>::push_back

ja.cppreference.net より

 
 
 
 
void push_back( const T& value );
(1) (C++20 から constexpr)
void push_back( T&& value );
(2) (C++11 から)
(C++20 から constexpr)

指定された要素 value をコンテナの末尾に追加します。

1) 新しい要素は value のコピーとして初期化されます。
2) value が新しい要素にムーブされます。

操作後に新しい size() が古い capacity() より大きい場合、再割り当てが発生し、その場合すべてのイテレータ(end() イテレータを含む)と要素へのすべての参照が無効になります。そうでない場合は、end() イテレータのみが無効になります。

パラメータ

value - 追加する要素の値

型要件
-
以下の条件が満たされる場合、動作は未定義です:
1) T が CopyInsertable でなく、 vector に挿入できない場合。
2) T が MoveInsertable でなく、 vector に挿入できない場合。
(C++11以降)

戻り値

(なし)

計算量

償却定数時間。

例外

例外がスローされた場合( Allocator::allocate() または要素のコピー/ムーブコンストラクタ/代入による可能性あり)、この関数は何も効果を持ちません( strong exception guarantee )。

Tのムーブコンストラクタが noexcept でなく、かつ Tが CopyInsertable でない場合、 vector は例外を投げる可能性のあるムーブコンストラクタを使用する。例外が投げられた場合、保証は放棄され、効果は未規定となる。

(C++11以降)

注記

一部の実装では、 std::length_error をスローする場合がある。これは push_back が max_size を超える再割り当てを引き起こすとき( reserve ( size () + 1)) と同等の暗黙的な呼び出しによる)である。

例

#include <iomanip>
#include <iostream>
#include <string>
#include <vector>
int main()
{
    std::vector<std::string> letters;
    letters.push_back("abc");
    std::string s{"def"};
    letters.push_back(std::move(s));
    std::cout << "std::vector letters holds: ";
    for (auto&& e : letters)
        std::cout << std::quoted(e) << ' ';
    std::cout << "\nMoved-from string s holds: " << std::quoted(s) << '\n';
}

出力例:

std::vector letters holds: "abc" "def"
Moved-from string s holds: ""

関連項目

要素をその場で末尾に構築する
(公開メンバ関数)
末尾の要素を削除する
(公開メンバ関数)
引数から推論された型の std::back_insert_iterator を作成する
(関数テンプレート)