C++容器之 forward_list (單向鏈表)使用說明

目錄

1.? 語法格式

2.? 說明

3.? 用法示例


1.? 語法格式

??? 描述控制可變長度元素序列的對象。該序列存儲為單向(前向)鏈接的節點列表,每個節點包含一個 Type 類型的成員。

template <class Type,

??? class Allocator = allocator<Type>>

??? class forward_list;

Type:要存儲在 forward_list 中的元素數據類型。

Allocator存儲的分配器對象,封裝了有關 forward_list 內存分配和釋放的詳細信息。此參數為可選參數。默認值為 allocator<Type>

2.? 說明

??? forward_list 對象通過基于 allocator 類(通常稱為 std::allocator)的 Allocator 類存儲對象為其控制的序列分配和釋放存儲空間。allocator 對象必須具有與 allocator 類型對象相同的外部接口。

??? 當迭代器、指針和引用所控制的序列中的元素通過 forward_list 刪除時,它們可能會失效。通過 forward_list 對受控序列執行插入和拼接操作不會使迭代器失效。

??? 受控序列的添加可以通過調用 forward_list::insert_after 來實現,該函數是唯一一個調用構造函數 Type(const T&) 的成員函數。forward_list 也可能調用移動構造函數。如果此類表達式引發異常,則容器對象不會插入任何新元素并重新引發異常。因此,當發生此類異常時,forward_list 類型的對象處于已知狀態。

??? 分配容器對象時,不會復制存儲的分配器對象。

??? forward_list 容器和雙向鏈表容器list的主要設計區別在于,前者在內部只保留指向下一個元素的鏈接,而后者每一個元素保留兩個鏈接:一個指向下一個元素,一個指向前一個元素,從而允許雙向高效迭代,但每個元素會消耗額外的存儲空間,并且插入和刪除元素的時間開銷略高。因此,forward_list 對象比列表對象更高效,盡管它們只能向前迭代。對于存儲零個或少數幾個元素的場景非常合適

??? 與其他基本標準序列容器(數組、向量和雙端隊列)相比,forward_list 在容器內任何位置插入、提取和移動元素方面通常表現更佳,因此在大量使用這些元素的算法(例如排序算法)中也表現出色。

??? 與其他序列容器相比,forward_list 和列表的主要缺點在于它們無法通過元素的位置直接訪問元素;例如,要訪問 forward_list 中的第六個元素,必須從起始位置迭代(即遍歷)到該位置,這需要線性時間。它們還會消耗一些額外的內存來保存與每個元素關聯的鏈接信息(這對于包含小元素的大型列表來說可能是一個重要因素)。

??? forward_list 類模板在設計時就考慮到了效率:從設計上講,它與簡單的手寫 C 語言單鏈表一樣高效,事實上,它是唯一一個出于效率考慮而故意省略 size 成員函數的標準容器:由于其鏈表性質,如果 size 成員函數的執行時間是常量級的,則需要維護一個內部計數器來記錄其大小(就像雙向list一樣)。這會消耗一些額外的存儲空間,并使插入和刪除操作的效率略有降低。要獲取 forward_list 對象的大小,可以使用距離算法及其 begin end 函數,這是一個線性時間操作。

3.? 用法示例

// forward_list_splice_after.cpp

// compile with: /EHsc /W4

#include <forward_list>

#include <iostream>

using namespace std;

template <typename S> void print(const S& s) {

??? for (const auto& p : s) {

??????? cout << "(" << p << ") ";

??? }

??? cout << endl;

}

int main()

{

??? forward_list<int> c1{ 10, 11 };

??? forward_list<int> c2{ 20, 21, 22 };

??? forward_list<int> c3{ 30, 31 };

??? forward_list<int> c4{ 40, 41, 42, 43 };

??? forward_list<int>::iterator where_iter;

??? forward_list<int>::iterator first_iter;

??? forward_list<int>::iterator last_iter;

??? cout << "Beginning state of lists:" << endl;

??? cout << "c1 = ";

??? print(c1);

??? cout << "c2 = ";

??? print(c2);

??? cout << "c3 = ";

??? print(c3);

??? cout << "c4 = ";

??? print(c4);

??? where_iter = c2.begin();

??? ++where_iter; // start at second element

??? c2.splice_after(where_iter, c1);

??? cout << "After splicing c1 into c2:" << endl;

??? cout << "c1 = ";

??? print(c1);

??? cout << "c2 = ";

??? print(c2);

??? first_iter = c3.begin();

??? c2.splice_after(where_iter, c3, first_iter);

??? cout << "After splicing the first element of c3 into c2:" << endl;

??? cout << "c3 = ";

??? print(c3);

??? cout << "c2 = ";

??? print(c2);

??? first_iter = c4.begin();

??? last_iter = c4.end();

??? // set up to get the middle elements

??? ++first_iter;

??? c2.splice_after(where_iter, c4, first_iter, last_iter);

??? cout << "After splicing a range of c4 into c2:" << endl;

??? cout << "c4 = ";

??? print(c4);

??? cout << "c2 = ";

??? print(c2);

}

輸出:

Beginning state of lists:c1 = (10) (11)c2 = (20) (21) (22)c3 = (30) (31)c4 = (40) (41) (42) (43)After splicing c1 into c2:c1 =c2 = (20) (21) (10) (11) (22)After splicing the first element of c3 into c2:c3 = (30)c2 = (20) (21) (31) (10) (11) (22)After splicing a range of c4 into c2:c4 = (40) (41)c2 = (20) (21) (42) (43) (31) (10) (11) (22)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84679.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ali 輕量服務器安裝nginx

# Ubuntu sudo apt install nginx-light # 精簡版 # CentOS sudo yum install nginx #啟動并設置開機自啟 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #驗證安裝 nginx -v curl -I 127.0.0.1 #常用命令&#xff1a; # 重新加載配…

【設計模式】4.代理模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 代理模式 1. 第一版 class SchoolGirl:def __init__(self):self._name Nonepropertydef name(self):return self._namename.setterdef name(self, valu…

基于微信小程序的美食點餐訂餐系統

文章目錄 1. 項目概述2. 項目思維導圖3. 系統架構特點4. 核心模塊實現代碼1. 登錄注冊2. 首頁模塊實現4. 分類模塊實現5. 購物車模塊實現6. 訂單模塊實現 5. 注意事項6. 項目效果截圖7. 關于作者其它項目視頻教程介紹 1. 項目概述 在移動互聯網時代&#xff0c;餐飲行業數字化…

[neo4j]介紹4個開源的知識圖譜項目

項目主要介紹幾個開源項目&#xff1a; QASystemOnMedicalKG&#xff1a;醫療知識圖譜問答 https://github.com/liuhuanyong/QASystemOnMedicalKG Agriculture_KnowledgeGraph&#xff1a;農業知識圖譜 Financial-Knowledge-Graphs&#xff1a;小型金融知識圖譜 stock-know…

20倍光學鏡頭怎么實現20+20倍數實現

1. 硬件選擇 球機攝像頭 選擇40倍光學變焦的攝像頭 &#xff1a;確保攝像頭具有足夠的變焦能力&#xff0c;同時考慮攝像頭的分辨率、幀率、夜視功能等。 內置云臺 &#xff1a;許多高端攝像頭已經內置了云臺功能&#xff0c;如果是這樣&#xff0c;可以簡化機械設計和電機控制…

Axios 在 Vue3 項目中的使用:從安裝到組件中的使用

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

【Python打卡Day50】預訓練模型與CBAM注意力@浙大疏錦行

現在我們思考下&#xff0c;是否可以對于預訓練模型增加模塊來優化其效果&#xff0c;這里我們會遇到一個問題: 預訓練模型的結構和權重是固定的&#xff0c;如果修改其中的模型結構&#xff0c;是否會大幅影響其性能。其次是訓練的時候如何訓練才可以更好的避免破壞原有的特征…

ONLYOFFICE Jira 集成應用程序 4.0.0 發布,含新的文件格式支持等多個重大更新!

ONLYOFFICE 與 Jira 集成的重大更新現已發布&#xff01;使用 ONLYOFFICE Docs 在 Jira Software 中處理各種辦公文檔&#xff0c;從 4.0.0 版本開始&#xff0c;ONLYOFFICE 連接器允許您編輯 PDF 文件和表單、直接從編輯器創建新文件、可視化用戶頭像、在 Jira 平臺內處理新文…

安裝區塊鏈相關Geth(基于CentOS7)

注&#xff1a;由于版本沖突問題&#xff0c;請嚴格按如下介紹版本進行安裝 安裝所需資料&#xff1a;通過網盤分享的文件&#xff1a;區塊鏈_CSDN 鏈接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwdzgzs 提取碼: zgzs --來自百度網盤超級會員v6的分享 一、安裝運…

系統分析師——計算機系統基礎

系統分析師——計算機系統基礎 引言 作為系統分析師學習的第一節課&#xff0c;計算機系統基礎部分構建了整個知識體系的核心框架。本文將圍繞計算機系統的層次結構、硬件組成、軟件分類以及關鍵技術點進行詳細總結&#xff0c;為后續深入學習奠定基礎。 本節學習內容如下圖&…

JS常用設計模式匯總

1、基于類的單例模式 // PageManager.js class PageManager {constructor(config) {if (!PageManager.instance) {this.config config;this.initialized false;PageManager.instance this;this.init();}return PageManager.instance;}init() {if (this.initialized) return…

邁向軟件開發 T 型人才之路:構建多元能力體系

在軟件開發的廣袤天地里&#xff0c;T 型人才備受矚目。這類人才猶如具備強大能量的 “多面手”&#xff0c;既有深入專精的技術能力&#xff0c;又有廣泛多元的知識與技能儲備&#xff0c;能夠從容應對復雜多變的項目需求&#xff0c;引領行業創新發展。于當今社會而言&#x…

SALMONN-omni論文閱讀

論文鏈接 項目鏈接 名詞理解&#xff1a; backchanneling&#xff1a; 指的是聽話人在不打斷說話人的情況下&#xff0c;用簡短的語氣詞或動作表示“我在聽”“我理解了”的反饋。 常見示例包括&#xff1a; “嗯哼”&#xff08;“uh-huh”&#xff09; “對的”&#xff08…

區塊鏈:什么是DeFi?

DeFi&#xff08;去中心化金融&#xff0c;Decentralized Finance&#xff09; 是一種基于區塊鏈技術的金融生態系統&#xff0c;旨在通過去中心化的方式提供傳統金融服務&#xff08;如借貸、交易、儲蓄等&#xff09;&#xff0c;無需依賴銀行、經紀商等中介機構。DeFi主要構…

idea編譯器使用git拉取、提交非常慢的原因和解決方案

前言 最近在公司換了一個電腦,但是發現這個電腦用idea編譯器使用git拉取、提交各種操作非常慢,有時候需要等10分鐘左右,這明顯是不對勁的,說明電腦的某些環境影響到git和idea之間的整合了。 目錄 在idea拉取代碼非常慢的原因 解決方案 在idea拉取代碼非常慢的原因 經過排查…

C語言變量的奇妙世界:探秘作用域

資料合集下載鏈接: ??https://pan.quark.cn/s/472bbdfcd014?? 在C語言的編程世界里,變量是我們存儲和操作數據的基礎。然而,僅僅知道如何定義和使用變量是遠遠不夠的。一個更深層次的理解,在于掌握變量的“作用域”——也就是變量在程序中可以被訪問和使用的范圍。這就…

恒流源和直流穩壓電源 電路

目錄 前言一、恒流源電路1.低端反饋2.低端反饋注意事項注意1&#xff1a;電阻Rx注意2&#xff1a;三極管和運放的限制 3.高端反饋注意&#xff1a;自激振蕩方案二 二、直流穩壓電源電流1.帶反饋2.不帶反饋3.區別 前言 基礎知識可以看個人筆記&#xff1a;個人筆記 一、恒流源…

那些年,曾經輝煌過的數據庫

滾滾長江東逝水&#xff0c;浪花淘盡英雄&#xff01; 數據庫的演進史&#xff0c;正是這樣一部“英雄迭代”的壯闊史詩。從早期數據模型的拓荒者&#xff0c;到關系型數據庫的商業巨頭&#xff1b;從桌面應用的普及者&#xff0c;再到開源與大數據時代的弄潮兒&#xff1b;每…

2D曲線點云平滑去噪

2D曲線點云&#xff0c;含許多噪聲&#xff0c;采用類似移動最小二乘的方法&#xff08;MLS)分段擬合拋物線并投影至拋物線&#xff0c;進行點云平滑去噪。 更通俗的說法是讓有一定寬度的曲線點云&#xff0c;變成一條細曲線上的點。 分兩種情況進行討論&#xff1a; 1&#…

【平面波導外腔激光器專題系列】用于精密測量的平面波導外腔激光器特性

----翻譯自Kenji Numata等人的文章 摘要 1542 nm平面波導外腔激光器PW-ECL具有足夠低的噪聲非常適合精密測量應用。與 0.1mHz至100kHz 之間&#xff0c;其頻率和強度噪聲與非平面環形振蕩器 NPRO和光纖激光器相當或更好。通過將 PW-ECL 的頻率穩定在乙炔&#xff08;13C2H2&a…