名前空間
変種
操作

std::list

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

    class T,
    class Allocator = std::allocator<T>

> class list;
(1)
namespace pmr {

    template< class T >
    using list = std::list<T, std::pmr::polymorphic_allocator<T>>;

}
(2) (C++17以降)

std::list は、コンテナの任意の位置からの要素の挿入と削除を定数時間でサポートするコンテナである。高速なランダムアクセスはサポートされていない。通常、双方向連結リストとして実装される。std::forward_list と比較して、このコンテナは双方向イテレーション機能を提供するが、空間効率は低い。

リスト内または複数のリスト間での要素の追加、削除、移動は、イテレータや参照を無効にしない。イテレータは、対応する要素が削除された場合にのみ無効になる。

std::listContainer (コンテナ)、AllocatorAwareContainer (アロケータ認識コンテナ)、SequenceContainer (シーケンスコンテナ)、および ReversibleContainer (リバーシブルコンテナ) の要件を満たす。

std::list の全てのメンバ関数は constexpr である: 定数式の評価において std::list オブジェクトを作成し使用することが可能である。

しかし、動的に割り当てられたストレージは同じ定数式の評価内で解放されなければならないため、std::list オブジェクトは一般的に constexpr にはなれない。

(C++26以降)

目次

[編集] テンプレートパラメータ

T - 要素の型。
TCopyConstructible (コピー構築可能) の要件を満たさなければならない。T を使って list::operator= または list::assign がインスタンス化される場合、TCopyAssignable (コピー代入可能) の要件を満たさなければならない。 (C++11まで)
要素に課される要件は、コンテナに対して実行される実際の操作に依存する。一般的に、要素型は完全な型であり、削除可能(Erasable) の要件を満たすことが要求されるが、多くのメンバ関数はより厳しい要件を課す。 (C++11以降)
(C++17まで)

要素に課せられる要件は、コンテナに対して実行される実際の操作に依存する。一般的に、要素型は Erasable (削除可能) の要件を満たすことが要求されるが、多くのメンバ関数はより厳しい要件を課す。アロケータがアロケータ完全性要件を満たしていれば、このコンテナ(ただしそのメンバではない)は不完全な要素型でインスタンス化できる。

機能テストマクロ 規格 機能
__cpp_lib_incomplete_container_elements 201505L (C++17) 不完全な型の最小限のサポート
(C++17以降)

[編集]

アロケータ - メモリの確保/解放、およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は アロケータ(Allocator) の要件を満たさなければならない。Allocator::value_typeT と同じでない場合、その振る舞いは未定義である(C++20まで)プログラムは不適格となる(C++20から)[編集]

[編集] メンバ型

メンバ型 定義
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

Allocator::pointer

(C++11まで)

std::allocator_traits<Allocator>::pointer

(C++11以降)
[編集]
const_pointer

Allocator::const_pointer

(C++11まで)

std::allocator_traits<Allocator>::const_pointer

(C++11以降)
[編集]
iterator value_type への LegacyBidirectionalIterator および ConstexprIterator(C++26以降)[編集]
const_iterator const value_type への LegacyBidirectionalIterator および ConstexprIterator(C++26以降)[編集]
reverse_iterator std::reverse_iterator<iterator>[編集]
const_reverse_iterator std::reverse_iterator<const_iterator>[編集]

[編集] メンバ関数

list を構築する
(公開メンバ関数) [編集]
list を破棄する
(公開メンバ関数) [編集]
コンテナに値を代入する
(公開メンバ関数) [編集]
コンテナに値を代入する
(公開メンバ関数) [編集]
コンテナに値の範囲を代入する
(公開メンバ関数) [編集]
関連付けられたアロケータを返す
(公開メンバ関数) [編集]
要素アクセス
最初の要素にアクセスする
(public メンバ関数) [編集]
最後の要素にアクセスする
(public メンバ関数) [編集]
イテレータ
先頭へのイテレータを返す
(public メンバ関数) [編集]
(C++11)
末尾へのイテレータを返す
(public メンバ関数) [編集]
先頭への逆イテレータを返す
(public メンバ関数) [編集]
(C++11)
末尾への逆イテレータを返す
(public メンバ関数) [編集]
容量
コンテナが空かどうかをチェックする
(public メンバ関数) [編集]
要素数を返す
(public メンバ関数) [編集]
可能な最大要素数を返す
(public メンバ関数) [編集]
変更
内容をクリアする
(公開メンバ関数) [編集]
要素を挿入する
(公開メンバ関数) [編集]
要素の範囲を挿入する
(公開メンバ関数) [編集]
(C++11)
要素を直接構築する
(公開メンバ関数) [編集]
要素を削除する
(公開メンバ関数) [編集]
末尾に要素を追加する
(公開メンバ関数) [編集]
末尾に要素を直接構築する
(公開メンバ関数) [編集]
末尾に要素の範囲を追加する
(公開メンバ関数) [編集]
最後の要素を削除する
(公開メンバ関数) [編集]
先頭に要素を挿入する
(公開メンバ関数) [編集]
先頭に要素を直接構築する
(公開メンバ関数) [編集]
先頭に要素の範囲を追加する
(公開メンバ関数) [編集]
最初の要素を削除する
(公開メンバ関数) [編集]
格納されている要素の数を変更する
(公開メンバ関数) [編集]
内容を交換する
(public メンバ関数) [編集]
操作
ソート済みの2つのリストをマージする
(公開メンバ関数) [編集]
他の list から要素を移動する
(public member function) [編集]
特定の基準を満たす要素を削除する
(public member function) [編集]
要素の順序を反転する
(public member function) [編集]
連続する重複した要素を削除する
(public member function) [編集]
要素をソートする
(public member function) [編集]

[編集] 非メンバ関数

(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20)
2つの list の値を辞書式比較する
(関数テンプレート) [編集]
std::swap アルゴリズムを特殊化する
(関数テンプレート) [編集]
特定の基準を満たすすべての要素を削除する
(関数テンプレート) [編集]

推論補助

(C++17以降)

[編集] ノート

機能テストマクロ 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナのRangeコンストラクタとRange挿入
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::list

[編集]

#include <algorithm>
#include <iostream>
#include <list>
 
int main()
{
    // Create a list containing integers
    std::list<int> l = {7, 5, 16, 8};
 
    // Add an integer to the front of the list
    l.push_front(25);
    // Add an integer to the back of the list
    l.push_back(13);
 
    // Insert an integer before 16 by searching
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end())
        l.insert(it, 42);
 
    // Print out the list
    std::cout << "l = { ";
    for (int n : l)
        std::cout << n << ", ";
    std::cout << "};\n";
}

出力

l = { 25, 7, 5, 42, 16, 8, 13, };

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 230 C++98 Tコピー構築可能(CopyConstructible) である必要はなかった
(型 T の要素が構築できない可能性がある)
T は以下も要求される
CopyConstructible であること
LWG 276 C++98 T は常に CopyAssignable (コピー代入可能) である必要があった operator= または
assignT でインスタンス化される場合にのみ要求される

[編集] 関連項目

単方向連結リスト
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)