STL介紹及使用場景分析

一.總體介紹

STL(Standard Template Library)是C++標準模板庫,提供了一系列的通用模板類和函數,用于實現常見的數據結構和算法,方便開發者快速地實現各種功能。STL包括了容器(Containers)、算法(Algorithms)和迭代器(Iterators)三個組件。

STL容器是STL中最重要的部分之一,提供了各種不同類型的數據結構,包括序列容器(如vector、list、deque等)、關聯容器(如set、map、multiset、multimap等)和容器適配器(如stack、queue、priority_queue等)。每種容器都有不同的特點和適用場景,開發者可以根據具體需求選擇合適的容器。

以下是STL中常用的容器及其簡要介紹:

  1. vector:動態數組,支持隨機訪問和動態增刪元素,適用于需要頻繁訪問元素的情況。
  2. list:雙向鏈表,支持快速插入和刪除元素,適用于頻繁插入和刪除元素的情況。
  3. deque:雙端隊列,支持在兩端進行插入和刪除操作,適用于需要在兩端進行頻繁插入和刪除操作的情況。
  4. set/multiset:集合,元素按照一定規則排序,且元素不重復,適用于需要快速查找和去重的情況。
  5. map/multimap:映射,鍵值對存儲,適用于需要快速查找和鍵值對存儲的情況。
  6. stack:棧,后進先出的數據結構,適用于需要后進先出的情況。
  7. queue:隊列,先進先出的數據結構,適用于需要先進先出的情況。
  8. priority_queue:優先隊列,按照一定規則排序,每次取出的元素為最優先元素,適用于需要按照優先級取出元素的情況。

在選擇STL容器時,需要根據具體的需求和情況進行選擇,考慮以下因素:

  • 數據結構特點:不同的容器有不同的特點和適用場景,需要根據需求選擇合適的數據結構。
  • 操作復雜度:不同的容器對于不同的操作有不同的時間復雜度,需要根據具體操作的頻率選擇合適的容器。
  • 內存占用:不同的容器在內存占用上也有不同,需要根據內存占用的要求選擇合適的容器。

總的來說,STL容器提供了豐富的選擇,開發者可以根據具體需求選擇合適的容器,以實現高效的數據結構和算法。

二.使用方法?

1.vector

#include <vector>
#include <iostream>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}return 0;
}

2.list?

#include <list>
#include <iostream>int main() {std::list<int> myList = {1, 2, 3, 4, 5};myList.push_back(6);myList.push_front(0);for (auto it = myList.begin(); it != myList.end(); it++) {std::cout << *it << " ";}return 0;
}

?3.deque

#include <deque>
#include <iostream>int main() {std::deque<int> myDeque = {1, 2, 3, 4, 5};myDeque.push_back(6);myDeque.push_front(0);for (int i = 0; i < myDeque.size(); i++) {std::cout << myDeque[i] << " ";}return 0;
}

4.set

#include <set>
#include <iostream>int main() {std::set<int> mySet = {3, 1, 4, 1, 5, 9};for (auto it = mySet.begin(); it != mySet.end(); it++) {std::cout << *it << " ";}return 0;
}

5.map

#include <map>
#include <iostream>int main() {std::map<std::string, int> myMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};for (auto it = myMap.begin(); it != myMap.end(); it++) {std::cout << it->first << ": " << it->second << std::endl;}return 0;
}

?6.stack

#include <stack>
#include <iostream>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);while (!myStack.empty()) {std::cout << myStack.top() << " ";myStack.pop();}return 0;
}

?7.queue

#include <queue>
#include <iostream>int main() {std::queue<int> myQueue;myQueue.push(1);myQueue.push(2);myQueue.push(3);while (!myQueue.empty()) {std::cout << myQueue.front() << " ";myQueue.pop();}return 0;
}

三.優先隊列介紹?

priority_queue?是一個優先隊列容器,它基于堆數據結構實現,可以保證在插入和刪除元素時,始終保持隊列中的元素按照一定的優先級順序排列。在?priority_queue?中,最優先的元素始終位于隊列的頂部,可以通過?top()?方法獲取最優先的元素。

priority_queue?提供了一些常用的操作,如插入元素?push()、刪除最優先元素?pop()、獲取最優先元素?top()?等。在?priority_queue?中,元素的優先級由比較函數或者元素類型的?<?操作符決定。

以下是?priority_queue?的一些重要特點和注意事項:

  • 默認情況下,priority_queue?是一個最大堆,即最大的元素位于隊列的頂部。
  • 可以通過指定比較函數或者使用自定義的元素類型重載?<?操作符來實現最小堆。
  • priority_queue?不支持遍歷操作,只能通過?top()?方法獲取最優先元素,然后通過?pop()?方法刪除該元素。
  • 插入和刪除操作的時間復雜度為 O(log n),獲取最優先元素的時間復雜度為 O(1)。

示例:

#include <queue>
#include <iostream>int main() {std::priority_queue<int> myPriorityQueue;myPriorityQueue.push(3);myPriorityQueue.push(1);myPriorityQueue.push(5);while (!myPriorityQueue.empty()) {std::cout << myPriorityQueue.top() << " ";myPriorityQueue.pop();}return 0;
}

?在上面的示例中,我們創建了一個?priority_queue,并依次插入了元素 3、1、5。然后通過循環獲取最優先元素并輸出,最終輸出結果為 5、3、1。

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

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

相關文章

[BJDCTF 2020]easy_md5、[HNCTF 2022 Week1]Interesting_include、[GDOUCTF 2023]泄露的偽裝

目錄 [BJDCTF 2020]easy_md5 ffifdyop [SWPUCTF 2021 新生賽]crypto8 [HNCTF 2022 Week1]Interesting_include php://filter協議 [GDOUCTF 2023]泄露的偽裝 [BJDCTF 2020]easy_md5 嘗試輸入一個1&#xff0c;發現輸入的內容會通過get傳遞但是沒有其他回顯 觀察一下響應…

文本協議中嵌入二進制數據

在文本協議中嵌入二進制數據時&#xff0c;通常不推薦使用new String(byte[], Charset)&#xff0c;除非你確定這些字節實際上是以指定的字符集編碼的文本。這是因為如果字節不是有效的文本編碼&#xff0c;那么使用new String(byte[], Charset)可能會產生不可預測的結果&#…

VictoriaMetrics

概念 介紹 VictoriaMetrics&#xff0c;是一個快速高效、經濟并且可擴展的監控解決方案和時序數據庫 本文均用VM簡稱VictoriaMetric 作用 用于作為prometheus的長期儲存方案&#xff0c;代替prometheus存儲監控采集的數據 優點 遠程存儲&#xff1a;可作為單一或多個Pro…

【算法】二分查找——二分查找

本節博客詳述“二分查找”并且以例子來進行討論&#xff0c;有需要借鑒即可。 目錄 1.二分查找1.1使用前提1.2模板 2.題目3.題解代碼示例4.二分查找的一般模板5.總結 1.二分查找 1.1使用前提 使用的條件&#xff1a;數組具有“二段性”&#xff0c;二段性指的是數組可以根據某…

110份財務常用excel模板(個稅、采購、報銷、預算),超實用!

如果你還在為報表頭疼&#xff0c;那你一定不能錯過這篇干貨滿滿的分享&#xff01; 個稅報表 個人所得稅&#xff0c;聽起來就頭大&#xff1f;別擔心&#xff0c;掌握這些技巧&#xff0c;輕松搞定&#xff01; - 記錄員工收入&#xff0c;確保數據準確無誤 - 計算應納稅…

【Unity Shader入門精要 第7章】基礎紋理(一)

1. 紋理映射 每一張紋理可以看作擁有一個屬于自己的2D坐標空間&#xff0c;其橫軸用U表示&#xff0c;縱軸用V表示&#xff0c;因此也稱為UV坐標空間。 UV空間的坐標范圍為[0&#xff0c;0]到[1&#xff0c;1]&#xff0c;在Unity中&#xff0c;UV空間也是從左下到右上&#…

測試萌新Python學習(五)接口自動化測試requests

requests 接口自動化測試requests庫基本實現請求-GET基本實現請求-POST基本實現請求-補充 sessionCookie和Session案例params 接口自動化測試 概念程序驅動代替人工驅動去實現接口測試 實現方式 測試工具(jmeter, postman, …)編碼工具(python, java, …) 比較 工具 優點:…

Network Compression

聽課&#xff08;李宏毅老師的&#xff09;筆記&#xff0c;方便梳理框架&#xff0c;以作復習之用。本節課主要講了Network Compression&#xff0c;包括為什么要壓縮&#xff0c;壓縮的主要手段&#xff08;pruning,knowledge distillation,parameter quantization,architect…

Elasticsearch_sql插件安裝+使用

一、安裝 前提是你先安裝好了elasticseach&#xff0c;安裝過程在我上一篇博客有說&#xff0c;可以看一下。 在elasticsearch容器啟動的情況下&#xff0c;進入到elasticsearch容器&#xff0c;Elasticsearch_sql倉庫&#xff0c;比如我的版本是8.11.2&#xff0c;那么我就選…

[藍橋杯]真題講解:抓娃娃(思維+二分)

[藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09; 一、視頻講解二、正解代碼1、C2、python33、Java 一、視頻講解 [藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09;&#xff09; 二、正解代碼 1、C #include<bits/stdc.h> #d…

fastapi+vue實現導入Excel表格的功能

1.前端部分 1.1 api設置 // 導入用戶 export function uploadUser(data) {const formData new FormData();formData.append(file, data); // data 是從文件上傳事件中獲取的文件對象return request({url: /users/upload,method: post,headers: {Content-Type: multipart/fo…

前端CSS3基礎1(新增長度單位,盒子模型,背景,邊框,文本屬性,漸變,字體,2D變換,3D變換)

前端CSS3基礎1&#xff08;新增長度單位&#xff0c;盒子模型&#xff0c;背景&#xff0c;邊框&#xff0c;文本屬性&#xff0c;漸變&#xff0c;字體&#xff0c;2D變換&#xff0c;3D變換&#xff09; CSS3 新增長度單位CSS3 新增盒子模型相關屬性box-sizing怪異盒模型box-…

實現簡易版Vuex

從實現一個簡單的 Vuex 類來了解 Vuex 的工作原理。 實現思路 Vuex 下擁有 install 方法和 Store 類。即創建一個 Vuex 的模塊&#xff0c;這個模塊導出 install 方法和 Store 類。 install 方法 Vuex 是 Vue 的一個插件&#xff0c;所以需要實現 Vue 插件約定的 install 方…

Linux:ftp文件傳輸實驗

Linux&#xff1a;ftp文件傳輸實驗 實驗實現 # 安裝對應軟件 [rootserver120 ~]# dnf install vsftpd -y [rootserver120 ~]# dnf install lftp -y# 關閉防火墻以及開啟服務 [rootserver120 ~]# systemctl disable --now firewalld [rootserver120 ~]# systemctl enable --no…

ambari-server高可用配置方案

制品 https://kdocs.cn/l/cie4hSgvUunX 前置條件 環境需要支持VRRP協議 環境需要配置好yum源 變更影響面 變更不會影響其他組件 配置lb(需要客戶側配置并提供LB地址) 轉發方式選擇 主備 監聽端口為8080、8440、8441 協議為tcp 后端監聽選擇kde-offline1為主

【RAG 論文】UPR:使用 LLM 來做檢索后的 re-rank

論文&#xff1a;Improving Passage Retrieval with Zero-Shot Question Generation ???? EMNLP 2022, arXiv:2204.07496 Code: github.com/DevSinghSachan/unsupervised-passage-reranking 論文&#xff1a;Open-source Large Language Models are Strong Zero-shot Query…

【HR】阿里三板斧--20240514

參考https://blog.csdn.net/haydenwang8287/article/details/113541512 頭部三板斧 戰略能不能落地、文化能不能得到傳承、人才能不能得到保障。 頭部三板斧適用的核心場景有三個&#xff1a;一是戰略不靠譜&#xff1b;二是組織效率低、不聚心&#xff1b;三是人才跟不上。對…

c++ 各版本特性介紹

c C是一種高級編程語言&#xff0c;以其強大的功能、靈活性和高效性而聞名。它是由Bjarne Stroustrup在20世紀80年代初期在貝爾實驗室開發的&#xff0c;作為C語言的一個擴展。C不僅包含了C語言的所有特性&#xff0c;還引入了面向對象編程&#xff08;OOP&#xff09;的概念&…

基于Vue3+ElementPlus項目,復制文字到剪貼板功能實踐指南,揭秘使用js-tool-big-box工具庫的核心優勢

在前端開發項目中&#xff0c;很多時候有那么一個場景&#xff0c;就是要求將一段文案復制下來&#xff0c;這段文案可能是一串很長的id&#xff0c;可能是一條命令語句&#xff0c;可能是一小段文案&#xff0c;復制到剪貼板上。這樣有利于用戶復制到其他地方去&#xff0c;使…

自然資源-城鄉規劃行業未來二十年將何去何從?

自然資源-城鄉規劃行業未來二十年將何去何從? 城鄉規劃行業未來風口在以下幾個方向&#xff0c;看好啦&#xff01;緊跟國家發展戰略和政策背景。 1.大數據的城市規劃應用。 包含:公共數據平臺的搭建CIM&#xff0c;數據賦能治理&#xff0c;城市規劃中大數據應用的研究 等…