Namespaces
Variants

std:: list

From cppreference.net
ヘッダーで定義 <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::list Container AllocatorAwareContainer SequenceContainer および ReversibleContainer の要件を満たします。

std::list の全メンバ関数は constexpr となり、定数式の評価中に std::list オブジェクトの作成と使用が可能です。

ただし、 std::list オブジェクト自体は一般に constexpr にはなりません。これは動的に確保された記憶域が同じ定数式の評価内で解放されなければならないためです。

(C++26以降)

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++専門用語(Template parameters、Member types、Member functions、Element access、Iterators、Capacity、Modifiers、Operations、Non-member functions、Deduction guides、Notes、Example、Defect reports、See also)は原文のまま保持しました - HTMLタグ、属性、class名、ID、数値は一切変更していません - フォーマットと構造は完全に保持されています

テンプレートパラメータ

T - 要素の型。
T CopyConstructible の要件を満たさなければならない。 T は、 list::operator= または list::assign T でインスタンス化される場合、 CopyAssignable の要件を満たさなければならない。 (C++11以前)
要素に課せられる要件は、コンテナで実際に実行される操作に依存する。一般的には、要素型が完全型であり、 Erasable の要件を満たすことが要求されるが、多くのメンバ関数はより厳格な要件を課す。 (C++11以降)
(C++17以前)

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

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

アロケータ - メモリの取得/解放およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は Allocator の要件を満たさなければならない。 動作は未定義 (C++20以前) プログラムは不適格 (C++20以降) Allocator::value_type T と同じでない場合)。

メンバー型

メンバ型 定義
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 LegacyBidirectionalIterator かつ ConstexprIterator (C++26以降) value_type を指す
const_iterator LegacyBidirectionalIterator かつ ConstexprIterator (C++26以降) const value_type を指す
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

メンバー関数

list を構築する
(公開メンバ関数)
list を破棄する
(public member function)
コンテナに値を代入する
(公開メンバ関数)
コンテナに値を割り当てる
(公開メンバー関数)
値の範囲をコンテナに割り当てる
(公開メンバ関数)
関連付けられたアロケータを返す
(公開メンバ関数)
要素アクセス
最初の要素にアクセスする
(公開メンバ関数)
最後の要素にアクセスする
(公開メンバ関数)
イテレータ
先頭を指すイテレータを返す
(公開メンバ関数)
(C++11)
終端へのイテレータを返す
(公開メンバ関数)
先頭を指す逆方向イテレータを返す
(公開メンバ関数)
(C++11)
末尾を指す逆方向イテレータを返す
(公開メンバ関数)
容量
コンテナが空かどうかをチェックする
(public member function)
要素数を返す
(public member function)
要素の最大可能数を返す
(公開メンバ関数)
修飾子
内容をクリアする
(公開メンバー関数)
要素を挿入する
(公開メンバ関数)
要素の範囲を挿入する
(公開メンバ関数)
(C++11)
要素をその場で構築する
(公開メンバ関数)
要素を削除する
(公開メンバ関数)
末尾に要素を追加する
(公開メンバ関数)
要素をその場で末尾に構築する
(公開メンバ関数)
要素の範囲を末尾に追加する
(公開メンバ関数)
最後の要素を削除する
(public member function)
要素を先頭に挿入する
(公開メンバ関数)
要素を先頭にその場で構築する
(公開メンバ関数)
要素の範囲を先頭に追加する
(公開メンバ関数)
最初の要素を削除する
(公開メンバ関数)
格納されている要素の数を変更する
(公開メンバ関数)
内容を交換する
(公開メンバ関数)
演算
二つのソート済みリストをマージする
(公開メンバ関数)
別の list から要素を転送する
(公開メンバ関数)
特定の条件を満たす要素を削除する
(公開メンバ関数)
要素の順序を逆にする
(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) コンテナのためのレンジ構築と挿入
__cpp_lib_constexpr_list 202502L (C++26) constexpr std::list

#include <algorithm>
#include <iostream>
#include <list>
int main()
{
    // 整数を含むリストを作成
    std::list<int> l = {7, 5, 16, 8};
    // リストの先頭に整数を追加
    l.push_front(25);
    // リストの末尾に整数を追加
    l.push_back(13);
    // 検索によって16の前に整数を挿入
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end())
        l.insert(it, 42);
    // リストを出力
    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= または
assign T でインスタンス化される場合にのみ要求される

関連項目

単方向リンクリスト
(クラステンプレート)