std::list
| 定義於標頭檔 <list> |
||
| template< class T, |
(1) | |
| namespace pmr { template< class T > |
(2) | (自 C++17 起) |
std::list 是一個容器,支援在容器內任何位置進行常數時間的插入與移除操作。不支援快速隨機存取。它通常被實作為雙向鏈結串列。與 std::forward_list 相比,此容器提供了雙向迭代能力,但空間效率較低。
在 list 內或跨多個 list 增加、移除和移動元素並不會使迭代器或參照失效。只有當對應的元素被刪除時,迭代器才會失效。
std::list 符合 容器 (Container)、分配器感知容器 (AllocatorAwareContainer)、序列容器 (SequenceContainer) 和 可逆容器 (ReversibleContainer) 的要求。
|
|
(C++26 起) |
目錄 |
[編輯] 模板參數
| T | - | 元素的型別。
| ||||||||||||||
| 配置器 (Allocator) | - | 用於取得/釋放記憶體以及在該記憶體中建構/銷毀元素的配置器(Allocator)。此型別必須滿足 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
|
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(公開成員函式) | |
| 指派值給容器 (公開成員函式) | |
| 指派值給容器 (公開成員函式) | |
| (C++23) |
指派數值範圍給容器 (公開成員函式) |
| 回傳關聯的配置器 (公開成員函式) | |
元素存取 | |
| 存取第一個元素 (公開成員函式) | |
| 存取最後一個元素 (公開成員函式) | |
迭代器 | |
| (C++11) |
回傳指向起點的反覆器 (公開成員函式) |
| (C++11) |
回傳指向終點的反覆器 (公開成員函式) |
| (C++11) |
回傳指向起點的反向反覆器 (公開成員函式) |
| (C++11) |
回傳指向終點的反向反覆器 (公開成員函式) |
容量 | |
| 檢查容器是否為空 (公開成員函式) | |
| 回傳元素個數 (公開成員函式) | |
| 回傳最大可能的元素個數 (公開成員函式) | |
修改器 | |
| 清除內容 (公開成員函式) | |
| 插入元素 (公開成員函式) | |
| (C++23) |
插入數值範圍元素 (公開成員函式) |
| (C++11) |
原地建構元素 (公開成員函式) |
| 刪除元素 (公開成員函式) | |
| 新增元素到結尾 (公開成員函式) | |
| (C++11) |
原地建構一個元素到結尾 (公開成員函式) |
| (C++23) |
新增數值範圍元素到結尾 (公開成員函式) |
| 移除最後一個元素 (公開成員函式) | |
| 插入元素到開頭 (公開成員函式) | |
| (C++11) |
原地建構一個元素到開頭 (公開成員函式) |
| (C++23) |
新增數值範圍元素到開頭 (公開成員函式) |
| 移除第一個元素 (公開成員函式) | |
| 更改儲存的元素個數 (公開成員函式) | |
| 交換內容 (公開成員函式) | |
作業 (Operations) | |
| 合併兩個已排序的 list (公開成員函式) | |
從另一個 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++ 標準。
| DR | 應用於 | 出版時的行為 | 正確的行為 |
|---|---|---|---|
| LWG 230 | C++98 | T 未被要求為 CopyConstructible(型別為 T 的元素可能無法被建構) |
T 現在也被要求為 CopyConstructible |
| LWG 276 | C++98 | T 過去總是要求必須是 可複製賦值 (CopyAssignable) |
僅在 operator= 或 assign 使用 T 實例化時才需要 |
[編輯] 參見
| (C++11) |
單向鏈結串列 (類別模板) |