std:: list
|
ヘッダーで定義
<list>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (C++17以降) |
std::list
は、コンテナ内の任意の位置からの要素の挿入と削除を定数時間でサポートするコンテナです。高速なランダムアクセスはサポートされていません。通常、双方向リンクリストとして実装されます。
std::forward_list
と比較して、このコンテナは双方向イテレーション機能を提供しますが、メモリ効率は劣ります。
リスト内または複数のリスト間での要素の追加、削除、移動は、イテレータや参照を無効化しません。イテレータは対応する要素が削除された場合にのみ無効化されます。
std::list
は
Container
、
AllocatorAwareContainer
、
SequenceContainer
および
ReversibleContainer
の要件を満たします。
std::list
の全メンバ関数は
constexpr
となり、定数式の評価中に
std::list
オブジェクトの作成と使用が可能です。
ただし、
|
(C++26以降) |
目次 |
テンプレートパラメータ
| T | - |
要素の型。
|
||||||||||||||
| アロケータ | - |
メモリの取得/解放およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は
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
|
|
||||
const_pointer
|
|
||||
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++23)
|
値の範囲をコンテナに割り当てる
(公開メンバ関数) |
|
関連付けられたアロケータを返す
(公開メンバ関数) |
|
要素アクセス |
|
|
最初の要素にアクセスする
(公開メンバ関数) |
|
|
最後の要素にアクセスする
(公開メンバ関数) |
|
イテレータ |
|
|
(C++11)
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
終端へのイテレータを返す
(公開メンバ関数) |
|
(C++11)
|
先頭を指す逆方向イテレータを返す
(公開メンバ関数) |
|
(C++11)
|
末尾を指す逆方向イテレータを返す
(公開メンバ関数) |
容量 |
|
|
コンテナが空かどうかをチェックする
(public member function) |
|
|
要素数を返す
(public member function) |
|
|
要素の最大可能数を返す
(公開メンバ関数) |
|
修飾子 |
|
|
内容をクリアする
(公開メンバー関数) |
|
|
要素を挿入する
(公開メンバ関数) |
|
|
(C++23)
|
要素の範囲を挿入する
(公開メンバ関数) |
|
(C++11)
|
要素をその場で構築する
(公開メンバ関数) |
|
要素を削除する
(公開メンバ関数) |
|
|
末尾に要素を追加する
(公開メンバ関数) |
|
|
(C++11)
|
要素をその場で末尾に構築する
(公開メンバ関数) |
|
(C++23)
|
要素の範囲を末尾に追加する
(公開メンバ関数) |
|
最後の要素を削除する
(public member function) |
|
|
要素を先頭に挿入する
(公開メンバ関数) |
|
|
(C++11)
|
要素を先頭にその場で構築する
(公開メンバ関数) |
|
(C++23)
|
要素の範囲を先頭に追加する
(公開メンバ関数) |
|
最初の要素を削除する
(公開メンバ関数) |
|
|
格納されている要素の数を変更する
(公開メンバ関数) |
|
|
内容を交換する
(公開メンバ関数) |
|
演算 |
|
|
二つのソート済みリストをマージする
(公開メンバ関数) |
|
別の
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
でインスタンス化される場合にのみ要求される
|
関連項目
|
(C++11)
|
単方向リンクリスト
(クラステンプレート) |