類模板
<forward_list>

std::forward_list

template < class T, class Alloc = allocator<T> > class forward_list;
前向列表
前向列表是序列容器,允許在序列中的任何位置進行常量時間的插入和擦除操作。

前向列表是以單向連結串列的形式實現的;單向連結串列可以將其包含的每個元素儲存在不同且不相關的儲存位置。順序是透過將每個元素關聯到序列中下一個元素的連結來維持的。

一個forward_list容器和一個 list 容器之間的主要設計差異是,前者內部只保留一個指向下一個元素的連結,而後者每個元素保留兩個連結:一個指向下一個元素,一個指向前一個元素,這允許雙向的高效迭代,但每個元素會消耗額外的儲存空間,並且在插入和移除元素時有稍高的時間開銷。forward_list物件因此比 list 物件更高效,儘管它們只能向前迭代。

與其他基本標準序列容器(arrayvectordeque)相比,forward_list 在容器內任何位置插入、提取和移動元素方面通常表現更好,因此在大量使用這些操作的演算法(如排序演算法)中也表現更佳。

與這些其他序列容器相比,forward_listlist 的主要缺點是它們缺乏透過位置直接訪問元素的能力;例如,要訪問一個forward_list中的第六個元素,必須從頭開始迭代到那個位置,這需要與距離成線性關係的時間。它們還會消耗一些額外的記憶體來儲存與每個元素關聯的連結資訊(對於包含大量小尺寸元素的列表來說,這可能是一個重要因素)。

要放回的字元的forward_list類模板的設計考慮了效率:從設計上講,它和一個簡單的手寫 C 風格單向連結串列一樣高效,事實上,它是唯一一個出於效率考慮而故意缺少size成員函式的標準容器:由於其連結串列的性質,擁有一個size成員函式並使其耗時為常量時間,將要求它為自身的大小維護一個內部計數器(就像 list 那樣)。這會消耗一些額外的儲存空間,並使插入和移除操作的效率稍低。要獲取一個forward_list物件的大小,您可以使用 distance 演算法,並傳入其 beginend,這是一個耗時為線性的操作。

容器屬性

序列
序列容器中的元素以嚴格的線性序列排序。單個元素透過其在此序列中的位置進行訪問。
連結串列
每個元素都儲存著如何定位下一個元素的資訊,允許在特定元素之後進行常量時間的插入和擦除操作(甚至是整個範圍),但不支援直接的隨機訪問。
感知分配器
容器使用分配器物件來動態處理其儲存需求。

模板引數

T
元素的型別。
別名為成員型別forward_list::value_type.
Alloc
用於定義儲存分配模型的分配器物件型別。預設情況下,使用 allocator 類模板,它定義了最簡單的記憶體分配模型並且與值無關。
別名為成員型別forward_list::allocator_type.

成員型別

成員型別定義說明
value_type第一個模板引數 (T)
allocator_type第二個模板引數 (Alloc)預設為allocator<value_type>
引用value_type&
const_referenceconst value_type&
指標allocator_traits<allocator_type>::pointer對於預設的 allocatorvalue_type*
const_pointerallocator_traits<allocator_type>::const_pointer對於預設的 allocatorconst value_type*
iterator一個指向value_type隨機訪問迭代器,可轉換為const_iterator
const_iterator一個指向const value_type
difference_type一個有符號整數型別,與iterator_traits<iterator>::difference_type相同,通常與 ptrdiff_t 一樣
size_type一個可以表示任何非負值的difference_type的無符號整數型別,通常與 size_t 一樣

成員函式


迭代器


容量


元素訪問


修改器


操作


觀察器


非成員函式過載