名稱空間
變體
操作

std::list

來自 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 相比,此容器提供雙向迭代能力,但空間效率較低。

在 list 內或在數個 list 間新增、移除和移動元素不會非法化迭代器或引用。僅當對應的元素被刪除時,迭代器才會被非法化。

std::list 滿足容器 (Container) 、知分配器容器 (AllocatorAwareContainer) 、序列容器 (SequenceContainer) 及可逆容器 (ReversibleContainer) 的要求。

std::list 的所有成員函式都是 constexpr:可以在常量表達式求值中建立和使用 std::list 物件。

然而,std::list 物件通常不能是 constexpr 的,因為任何動態分配的儲存都必須在同一次常量表達式求值中釋放。

(C++26 起)

目錄

[編輯] 模板形參

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 - 用於獲取/釋放記憶體和構造/銷燬記憶體中元素的分配器。其型別必須滿足分配器 (Allocator) 的要求。Allocator::value_typeT 不同,則行為未定義(C++20 前)Allocator::value_typeT 不同,則程式非良構(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
(公開成員函式) [編輯]
將值賦給容器
(公開成員函式) [編輯]
將值賦給容器
(公開成員函式) [編輯]
將一個範圍的值賦給容器
(公開成員函式) [編輯]
返回關聯的分配器
(公開成員函式) [編輯]
元素訪問
訪問第一個元素
(公開成員函式) [編輯]
訪問最後一個元素
(公開成員函式) [編輯]
迭代器
返回指向起始的迭代器
(公開成員函式) [編輯]
(C++11)
返回指向末尾的迭代器
(公開成員函式) [編輯]
返回指向起始的逆向迭代器
(公開成員函式) [編輯]
(C++11)
返回指向末尾的逆向迭代器
(公開成員函式) [編輯]
容量
檢查容器是否為空
(公開成員函式) [編輯]
返回元素數量
(公開成員函式) [編輯]
返回元素的最大可能數量
(公開成員函式) [編輯]
修改器
清除內容
(公開成員函式) [編輯]
插入元素
(公開成員函式) [編輯]
插入元素範圍
(公開成員函式) [編輯]
(C++11)
就地構造元素
(公開成員函式) [編輯]
擦除元素
(公開成員函式) [編輯]
新增元素到結尾
(公開成員函式) [編輯]
就地構造元素於結尾
(公開成員函式) [編輯]
新增一個元素範圍到結尾
(公開成員函式) [編輯]
移除末元素
(公開成員函式) [編輯]
插入元素到起始
(公開成員函式) [編輯]
就地構造元素於起始
(公開成員函式) [編輯]
新增一個元素範圍到起始
(公開成員函式) [編輯]
移除首元素
(公開成員函式) [編輯]
更改儲存的元素數量
(公開成員函式) [編輯]
交換內容
(公開成員函式) [編輯]
操作
歸併兩個已排序連結串列
(公開成員函式) [編輯]
從另一個 list 移動元素
(公開成員函式) [編輯]
移除滿足特定標準的元素
(公開成員函式) [編輯]
反轉元素的順序
(公開成員函式) [編輯]
移除連續的重複元素
(公開成員函式) [編輯]
排序元素
(公開成員函式) [編輯]

[編輯] 非成員函式

(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20)
以字典序比較兩個 list 的值
(函式模板) [編輯]
特化 std::swap 演算法
(函式模板) [編輯]
擦除所有滿足特定標準的元素
(函式模板) [編輯]

推導指引

(C++17 起)

[編輯] 注意

特性測試 標準 特性
__cpp_lib_containers_ranges 202202L (C++23) 容器的範圍構造和插入
__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++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 230 C++98 T 不要求為可複製構造 (CopyConstructible)
(型別 T 的元素可能無法被構造)
T 也要求
可複製構造 (CopyConstructible)
LWG 276 C++98 T 曾始終要求為可複製賦值 (CopyAssignable) 僅當用 T 例項化
assignoperator= 時才要求

[編輯] 參閱

單向連結串列
(類模板) [編輯]