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 (リバーシブルコンテナ) の要件を満たす。
|
|
(C++26以降) |
目次 |
[編集] テンプレートパラメータ
| T | - | 要素の型。
| ||||||||||||||
| アロケータ | - | メモリの確保/解放、およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は アロケータ(Allocator) の要件を満たさなければならない。Allocator::value_type が T と同じでない場合、その振る舞いは未定義である(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
|
| ||||
const_pointer
|
| ||||
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 を破棄する(公開メンバ関数) | |
| コンテナに値を代入する (公開メンバ関数) | |
| コンテナに値を代入する (公開メンバ関数) | |
| (C++23) |
コンテナに値の範囲を代入する (公開メンバ関数) |
| 関連付けられたアロケータを返す (公開メンバ関数) | |
要素アクセス | |
| 最初の要素にアクセスする (public メンバ関数) | |
| 最後の要素にアクセスする (public メンバ関数) | |
イテレータ | |
| (C++11) |
先頭へのイテレータを返す (public メンバ関数) |
| (C++11) |
末尾へのイテレータを返す (public メンバ関数) |
| (C++11) |
先頭への逆イテレータを返す (public メンバ関数) |
| (C++11) |
末尾への逆イテレータを返す (public メンバ関数) |
容量 | |
| コンテナが空かどうかをチェックする (public メンバ関数) | |
| 要素数を返す (public メンバ関数) | |
| 可能な最大要素数を返す (public メンバ関数) | |
変更 | |
| 内容をクリアする (公開メンバ関数) | |
| 要素を挿入する (公開メンバ関数) | |
| (C++23) |
要素の範囲を挿入する (公開メンバ関数) |
| (C++11) |
要素を直接構築する (公開メンバ関数) |
| 要素を削除する (公開メンバ関数) | |
| 末尾に要素を追加する (公開メンバ関数) | |
| (C++11) |
末尾に要素を直接構築する (公開メンバ関数) |
| (C++23) |
末尾に要素の範囲を追加する (公開メンバ関数) |
| 最後の要素を削除する (公開メンバ関数) | |
| 先頭に要素を挿入する (公開メンバ関数) | |
| (C++11) |
先頭に要素を直接構築する (公開メンバ関数) |
| (C++23) |
先頭に要素の範囲を追加する (公開メンバ関数) |
| 最初の要素を削除する (公開メンバ関数) | |
| 格納されている要素の数を変更する (公開メンバ関数) | |
| 内容を交換する (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= または assign が T でインスタンス化される場合にのみ要求される |
[編集] 関連項目
| (C++11) |
単方向連結リスト (クラステンプレート) |