C++中的List

摘要

C++ 標準庫中的 `std::list` 是一種雙向鏈表容器,它允許在常數時間內進行插入和刪除操作,每個元素包含一個指向前一個和后一個元素的指針。這給我們開發提供了高效的插入和刪除操作。

引入頭文件

要使用 `std::list`,需要包含頭文件 `<list>`:

#include <list>

創建和初始化

#include <iostream>
#include <list>int main() {std::list<int> l1;                      // 默認構造函數std::list<int> l2(5, 10);               // 創建包含 5 個值為 10 的元素的列表std::list<int> l3 = {1, 2, 3, 4, 5, 6}; // 列表初始化// 輸出列表 l3 的內容for (int n : l3) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

常用方法和操作

1. 插入和刪除元素

#include <iostream>
#include <list>int main() {std::list<int> l = {1, 2, 3, 4, 5, 6};// 在末尾添加元素l.push_back(6);// 在開頭添加元素l.push_front(0);// 在第三個位置插入元素auto it = l.begin();std::advance(it, 3); // 前進 3 個位置l.insert(it, 99);// 刪除開頭的元素l.pop_front();// 刪除末尾的元素l.pop_back();// 刪除特定位置的元素it = l.begin();std::advance(it, 2); // 前進 2 個位置l.erase(it);// 輸出列表 l 的內容for (int n : l) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

2. 訪問元素

`std::list` 不支持隨機訪問(即不支持 `operator[]`),但是可以使用迭代器遍歷和訪問元素:

#include <iostream>
#include <list>int main() {std::list<int> l = {1, 2, 3, 4, 5, 6};// 使用迭代器遍歷for (auto it = l.begin(); it != l.end(); ++it) {std::cout << *it << ' ';}std::cout << std::endl;// 使用范圍 for 循環遍歷for (int n : l) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

3. 反向遍歷

#include <iostream>
#include <list>int main() {std::list<int> l = {1, 2, 3, 4, 5, 6};// 反向遍歷for (auto it = l.rbegin(); it != l.rend(); ++it) {std::cout << *it << ' ';}std::cout << std::endl;return 0;
}

4. 其它用法

#include <iostream>
#include <list>int main() {std::list<int> l = {1, 2, 3, 4, 5, 6};// 獲取列表大小std::cout << "Size: " << l.size() << std::endl;// 檢查是否為空if (l.empty()) {std::cout << "List is empty" << std::endl;} else {std::cout << "List is not empty" << std::endl;}// 清空列表l.clear();std::cout << "Size after clear: " << l.size() << std::endl;return 0;
}

進階使用技巧

1. 合并和排序

#include <iostream>
#include <list>int main() {std::list<int> l1 = {1, 3, 5, 7};std::list<int> l2 = {2, 4, 6, 8};// 合并兩個已排序的列表l1.merge(l2);// 排序l1.sort();// 反轉l1.reverse();// 輸出列表 l1 的內容for (int n : l1) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

2. 去重

#include <iostream>
#include <list>int main() {std::list<int> l = {1, 2, 2, 3, 3, 3, 4, 5};// 必須先排序,然后去重l.sort();l.unique();// 輸出去重后的列表 l 的內容for (int n : l) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

自定義比較函數

在 `sort`、`merge` 等方法中,可以傳遞自定義比較函數:

#include <iostream>
#include <list>bool customCompare(int a, int b) {return a > b; // 降序排列
}int main() {std::list<int> l = {1, 3, 2, 5, 4};// 使用自定義比較函數排序l.sort(customCompare);// 輸出排序后的列表 l 的內容for (int n : l) {std::cout << n << ' ';}std::cout << std::endl;return 0;
}

總結

`std::list` 是 C++ 標準庫中功能強大且靈活的雙向鏈表容器,適用于需要頻繁插入和刪除操作的場景。在我們實際開發中,根據項目的具體需求選擇合適的容器,比如‘std::forward_list’等,可以顯著提高代碼性能和可維護性。

引用

std::list - cppreference.com

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

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

相關文章

鈑金件設計規范

(一&#xff09; 鈑金 1、鈑金的概念 鈑金&#xff08;sheet metal&#xff09;是針對金屬薄板&#xff08;厚度通常在6mm以下&#xff09;的 一種綜合冷加工工藝&#xff0c;包括沖裁、折彎、拉深、成形、鍛壓、鉚合等&#xff0c; 其顯著的特征是同一零件厚度一致。 2、鈑…

C語言屬于什么是編程語言:探索C語言的本質與特性

C語言屬于什么是編程語言&#xff1a;探索C語言的本質與特性 在編程領域&#xff0c;C語言無疑是一種重要的、廣泛應用的編程語言。但是&#xff0c;C語言究竟屬于哪一類編程語言&#xff1f;它又有哪些獨特的特性和價值&#xff1f;本文將從四個方面、五個方面、六個方面和七…

精通推薦算法8:Embedding表征學習 -- 總體架構

1 Embedding表征學習的總體架構 目前&#xff0c;推薦算法精排模型大多基于Embedding MLP范式&#xff0c;模型底層是Embedding層&#xff0c;作用是將高維稀疏的輸入特征轉換為低維稠密的特征向量&#xff0c;并實現一定的模糊查找能力。模型上層是MLP層&#xff0c;作用是對…

在鯤鵬服務器上安裝nginx

華為鯤鵬服務器采用華為自研cpu ARMv8架構,提供 Windows 和多個Linux 系統 常使用 CentOS 7.6 64bit with ARM Nginx 和 Apache 一樣都是一種 Web 服務器。是基于 REST 架構風格&#xff0c;以統一資源描述符URI 或者統一資源定位符URL 作為溝通依據&#xff0c;通過 HTTP 協議…

【C++進階】深入STL之string:掌握高效字符串處理的關鍵

&#x1f4dd;個人主頁&#x1f339;&#xff1a;Eternity._ ?收錄專欄?&#xff1a;C “ 登神長階 ” &#x1f921;往期回顧&#x1f921;&#xff1a;C模板入門 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; ?STL之string &#x1f4d2;1. STL基本…

前端(JS)對URL的編碼和解碼方式以及重要性——IE瀏覽器必須對中文URL進行編碼

工作記錄-前端——前端&#xff08;JS&#xff09;對URL的編碼和解碼方式以及重要性——IE瀏覽器必須對中文URL進行編碼 創作場景前端JS對URL的三種編碼和解碼方式1. escape 和 unescape2. encodeURI 和 decodeURI3. encodeURIComponent 和 decodeURIComponent 本文重點 創作場…

net語言編程:深入探索其奧秘與挑戰

net語言編程&#xff1a;深入探索其奧秘與挑戰 在當今信息化社會&#xff0c;編程語言如同構建數字世界的磚瓦&#xff0c;而net語言編程便是其中的一顆璀璨明珠。它以其獨特的魅力吸引著無數開發者&#xff0c;但同時也伴隨著一系列令人困惑和充滿挑戰的問題。本文將從四個方…

大模型學習資料整理:如何從0到1學習大模型,搭建個人或企業RAG系統,如何評估與優化(更新中...)

通過本文您可以了解到&#xff1a; 學習&#xff1a;從小白如何入手&#xff0c;從0到1開始學習大模型。RAG系統&#xff1a;我想搭建屬于自己或者企業的RAG系統&#xff0c;我該怎么去做&#xff1f;評估&#xff1a;微調后的模型或者RAG系統&#xff0c;如何評估自己的模型和…

windows配置dns訪問git , 加快訪問速度保姆級教程

設置 DNS 訪問 Git 需要修改電腦的 DNS 配置。下面是具體的操作流程&#xff1a; 第一步&#xff1a;打開命令提示符或終端窗口 在 Windows 系統中&#xff0c;可以按下 Win R 組合鍵&#xff0c;然后輸入 “cmd”&#xff0c;按下 Enter 鍵打開命令提示符窗口。在 macOS 或 …

【活動】GPT-4O:AI語言生成技術的新里程碑

&#x1f308;個人主頁: 鑫寶Code &#x1f525;熱門專欄: 閑話雜談&#xff5c; 炫酷HTML | JavaScript基礎 ?&#x1f4ab;個人格言: "如無必要&#xff0c;勿增實體" 文章目錄 GPT-4O&#xff1a;AI語言生成技術的新里程碑引言GPT系列簡史回顧GPT-1: 初露鋒…

國際薦酒師(香港)協會亮相香港國際葡萄酒和烈酒展覽會

2024年5月28日至30日&#xff0c;備受矚目的香港國際葡萄酒和烈酒展覽會VINEXPO Hong Kong在香港盛大舉辦。作為亞太區最盛大的葡萄酒展會&#xff0c;本屆展會不僅吸引了全球葡萄酒和烈酒行業的目光&#xff0c;更見證了國際薦酒師&#xff08;香港&#xff09;協會&#xff0…

(2) qml誕生的原因 和Qt Creator開發環境的介紹

文章目錄 qml誕生原因Qt Quick應?程序Qt Creator環境1、MSVC2、MinGWMSVC的優缺點MinGW的優缺點 最后的選擇延伸閱讀 一些常用的快捷鍵統一格式化代碼統一qml 語言的格式Locator 定位器幫助 qml誕生原因 可以在Qt5中開發的不同類型的經典應?程序。桌?應?程 序正在發?著改…

物聯網斷點續傳

斷點續傳是一種在網絡傳輸中斷后&#xff0c;能夠從中斷的位置繼續傳輸的技術。它可以有效地避免因為網絡不穩定、服務器故障、用戶操作等原因導致的傳輸失敗&#xff0c;節省了用戶的時間和流量&#xff0c;提高了傳輸的效率和可靠性。斷點續傳在很多場景中都有廣泛的應用&…

GIS結合物聯網:塑造智慧地球的新篇章

在信息技術飛速發展的今天&#xff0c;地理信息系統&#xff08;GIS&#xff09;與物聯網&#xff08;IoT&#xff09;的深度融合&#xff0c;正以前所未有的方式重塑著我們對世界的認知。本文將深入探討GIS與物聯網結合的原理、應用實踐以及面臨的挑戰與未來展望&#xff0c;共…

鄉村振興與鄉村旅游品牌化:打造具有地方特色的鄉村旅游品牌,提升鄉村旅游吸引力,促進美麗鄉村建設

目錄 一、引言 二、鄉村旅游品牌化的重要性 &#xff08;一&#xff09;增強鄉村旅游的辨識度 &#xff08;二&#xff09;提升鄉村旅游的附加值 &#xff08;三&#xff09;促進鄉村文化的傳承與創新 三、打造具有地方特色的鄉村旅游品牌 &#xff08;一&#xff09;明…

Python知識點6---列表和元組

提前說一點&#xff1a;如果你是專注于Python開發&#xff0c;那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了&#xff0c;而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的列表和和元組定義方式如下&#xff0c;且注意列表和元組擁有…

【深度強化學習入門:結合直覺與算法的學習之旅】

文章目錄 前言深度強化學習的關鍵要素簡單的深度Q網絡&#xff08;DQN&#xff09;實現分析代碼結論 前言 深度強化學習結合了深度學習的表征學習能力和強化學習的決策制定機制&#xff0c;這使得機器能夠在復雜環境中自我學習并做出合理的行動策略。它在游戲玩耍、自動駕駛、…

Linux實驗報告(二)——Linux系統中的常用命令

目錄 一、實驗名稱&#xff1a; 二、儀器、設備&#xff1a; 三、參考資料&#xff1a; 四、實驗目的&#xff1a; 五、實驗內容&#xff08;步驟&#xff09;&#xff1a; 六、實驗數據&#xff08;程序&#xff09;記錄&#xff1a; ?編輯 ?編輯 七、實驗結果分析…

Python知識點9---推導式

提前說一點&#xff1a;如果你是專注于Python開發&#xff0c;那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了&#xff0c;而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python提供的推導式&#xff0c;只對列表、字典、集合三種數據類型生…

公司網站模板制作

公司網站模板的制作是一項極其重要的工作&#xff0c;因為網站模板決定了網站的整體風格和用戶體驗。一個漂亮、易用的網站模板將會吸引更多的用戶&#xff0c;而一個糟糕的網站模板則會讓用戶不供選擇。下面就讓我們介紹一下公司網站模板的制作。 首先&#xff0c;一個好的網站…