【C++學習第15天】STL

一、種類

  1. vector:變長數組,倍增的思想。給數組申請空間所耗費的時間取決于申請次數,而不是申請空間的大小,即a[1]和a[10000]兩個數組的申請時間是基本一致的。
  2. pair<int, string>:存儲一個二元組,前后兩個變量類型任意。也可以存儲多個類型,如pair<int, pair<int, string>>。
  3. string:字符串。操作:substr(), c_str()
  4. queue:隊列。操作:push(), front(), pop()
  5. priority_queue:優先隊列。操作:push(), top(), pop()
  6. stack:棧。操作:push(), top(), pop()
  7. deque:雙端隊列。
  8. set, map, multiset, multimap:基于平衡二叉樹(紅黑樹),動態維護有序序列。
  9. unordered_set, unordered_map, unordered_multiset, unordered_multimap:哈希表。
  10. bitset:壓位。

二、具體操作

  • 所有STL中的對象均具備:
a.size()
a.empty()
  • ?vector:
size()           // 返回元素個數
empty()          // 返回是否為空
clear()          // 清空
front()          // 返回數組的第一個數
back()           // 返回數組的最后一個數
push_back()      // 在數組的末尾插入一個數
pop_back()       // 彈出數組末尾的最后一個數
begin()          // vector的第0個數
end()            // vector最后一個數的后一位數
支持比較運算,如vector<int> a(4, 3), b(3, 4);其中, a < b。
當比較兩個vector對象時,實際上是在比較它們的字典序。
vector容器的比較操作符按照元素的順序進行比較。
它首先比較第一個元素,如果它們相等,則比較第二個元素,以此類推。
  • pair:
first()         // 返回第一個元素
second()        // 返回第二個元素
支持比較運算,以first為第一個關鍵字,second為第二個關鍵字,按字典序。
  • string
size()        
empty()
clear()
substr(a, b)        // 返回子串,a表示子串下標,b表示長度;
c_str()             
/*c_str()是C++中的一個字符串成員函數,用于返回一個指向以空字符結尾的字符數組(C風格字符串)的指針。
在C++中,字符串常常使用std::string類來表示。
c_str()函數允許我們將std::string對象轉換為C風格字符串的形式,即以const char*的形式表示。*/
  • queue:
size()
empty()
push()            // 向隊尾插入一個元素
front()           // 返回隊頭元素
back()            // 返回隊尾元素
pop()             // 彈出隊頭元素
q = queue<int>()  // 清空queue

值得注意的是,queue沒有clear()操作。

  • priority_queue:
push()    // 插入一個元素
top()     // 返回堆頂元素
pop()     // 彈出堆頂元素

默認是大根堆,小根堆定義如下:

priority_queue<int, vector<int>, great<int>> heap;
  • stack:
size()
empty()
push()        // 向棧頂插入一個元素
top()         // 返回棧頂元素
pop()         // 彈出棧頂元素
  • deque(效率較低,用的較少):
size()
empty()
clear()
front()        // 返回第一個元素
back()         // 返回最后一個元素
push_back()    // 在末尾插入一個元素
pop_back()     // 彈出末尾一個元素
push_front()   // 在隊首插入一個元素
pop_front()    // 彈出隊首一個元素
begin()
end()
  • set(不能有重復元素)/ multiset(可以有重復元素):
size()
empty()
clear()
begin()    // 可++,--
end()insert()
find()
count()        // 返回某一個數的個數
erase()(1) 輸入一個數x,刪除所有x,時間復雜度:O(k + logn);(2) 輸入一個迭代器,刪除這個迭代器.
lower_bound(x)    // 返回大于等于x的最小數的迭代器
upper_bound(x)    // 返回大于x的最小數的迭代器
[]              // 時間復雜度是 O(logn)
  • map / multimap
size()
empty()
clear()
begin()
end()insert()        // 插入的數是一個pair
erase()         // 輸入的參數是pair或者迭代器
find()
[]              // 時間復雜度是 O(logn)
lower_bound()
upper_bound()
  • unordered_set,?unordered_map,?unordered_multiset,?unordered_multimap, 哈希表

和上面類似,增刪改查的時間復雜度是 O(1),而除此之外上面的增刪改查的時間復雜度是 O(logn),但支持和排序有關的操作。

不支持 lower_bound() / upper_bound()、迭代器的++和--

  • bitset(壓位):
bitset<10000> s;
~ & | ^
>>, <<
==, !=
[]count()    // 返回有多少個1
any()      // 判斷是否至少有一個1
none()     // 判斷是否全為0
set()      // 把所有位置變成1
reset()    // 把所有位置變成0
flip()     // 等價于~
flip(k)    // 把第k位取反

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

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

相關文章

AI 圖像生成-環境配置

一、python環境安裝 Windows安裝Python&#xff08;圖解&#xff09; 二、CUDA安裝 CUDA安裝教程&#xff08;超詳細&#xff09;-CSDN博客 三、Git安裝 git安裝教程&#xff08;詳細版本&#xff09;-CSDN博客 四、啟動器安裝 這里安裝的是秋葉aaaki的安裝包 【AI繪畫…

【GlobalMapper精品教程】081:WGS84/CGCS2000轉Lambert投影

參考閱讀:ArcGIS實驗教程——實驗十:矢量數據投影變換 文章目錄 一、加載實驗數據二、設置輸出坐標系三、數據導出一、加載實驗數據 打開配套案例數據包中的data081.rar中的矢量數據,如下所示: 查看源坐標系:雙擊圖層的,圖層投影選項卡,數據的已有坐標系為WGS84地理坐標…

MySQL創建存儲過程函數

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 學號,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

[初學rust] 05_ rust struct

rust struct 其實這也算復合類型&#xff0c;但是其他語言都有&#xff0c;所以抽取出來單獨看的時候會很簡單&#xff0c;更容易學 1. 定義結構體 結構體的定義和其他語言沒啥區別。 struct User {name: String,age: i32, }2. 創建實例 創建實例的過程就跟js類似 let us…

【3dmax筆記】021:對齊工具(快速對齊、法線對齊、對齊攝影機)

文章目錄 一、對齊二、快速對齊三、法線對齊四、對齊攝影機五、注意事項3dmax提供了對齊、快速對齊、法線對齊和對齊攝像機等對齊工具: 對齊工具選項: 下面進行一一講解。 一、對齊 快捷鍵為Alt+A,將當前選擇對象與目標對象進行對齊。 最大對最大:

【小筆記】neo4j用load csv指令導入數據

【小筆記】neo4j用load csv指令導入數據 背景 很久沒有用load CSV的方式導入過數據了因為它每次導入有數量限制&#xff08;印象中是1K還是1W&#xff09;&#xff0c;在企業中構建的圖譜往往都是大規模的&#xff0c;此時通常采用的是Neo4j-admin import方式。最近遇到了一些…

振弦式表面應變計怎么安裝

振弦式表面應變計是一種用于測量結構表面應變的高精度傳感器&#xff0c;廣泛應用于工程和科研領域。正確安裝振弦式表面應變計對于確保測量結果的準確性至關重要。以下是安裝振弦式表面應變計的步驟和注意事項&#xff1a; 1. 準備工作 在開始安裝前&#xff0c;需要準備以下工…

whisper之初步使用記錄

文章目錄 前言 一、whisper是什么&#xff1f; 二、使用步驟 1.安裝 2.python調用 3.識別效果評估 4.一點封裝 5.參考鏈接 總結 前言 隨著AI大模型的不斷發展&#xff0c;語音識別等周邊內容也再次引發關注&#xff0c;通過語音轉文字再與大模型交互&#xff0c;從而…

【Gitlab遠程訪問本地倉庫】Gitlab如何安裝配置并結合內網穿透實現遠程訪問本地倉庫進行管理

文章目錄 前言1. 下載Gitlab2. 安裝Gitlab3. 啟動Gitlab4. 安裝cpolar5. 創建隧道配置訪問地址6. 固定GitLab訪問地址6.1 保留二級子域名6.2 配置二級子域名 7. 測試訪問二級子域名 前言 GitLab 是一個用于倉庫管理系統的開源項目&#xff0c;使用Git作為代碼管理工具&#xf…

為什么質量工程師必學六西格瑪?突破職業發展的瓶頸?

在質量管理領域工作多年&#xff0c;你是否曾感受到事業發展的停滯不前&#xff1f;3年、5年的職業生涯&#xff0c;薪水依舊停留在每月5000-7000&#xff0c;而同行業的其他人卻能月入2-3萬&#xff0c;這種差距讓人不禁陷入深思。 問題究竟出在哪里&#xff1f;為什么我們的…

編譯OpenResty遇到找不到OpenSSL的解決辦法

以OpenResty-1.19.9.1為例 編輯openresty-1.19.9.1/build/nginx-1.19.9/auto/lib/openssl/conf CORE_INCS"$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS"$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS"$CORE_LIBS $OPENSSL/.…

揭秘圖形編程 動靜接口如何助力 AGV 集成

在公司軟件開發團隊的辦公室里&#xff0c;陽光透過窗戶灑在排列整齊的辦公桌上。臥龍坐在辦公桌前&#xff0c;面前攤開一份內測報告&#xff0c;他的手指時不時地敲擊著桌面&#xff0c;流露出內心的煩躁。他抬起頭&#xff0c;眼神中透露出一絲困惑&#xff0c;看向正在文件…

調用函數實現數組的輸入排序插入與輸出

輸入一串數字&#xff0c;輸出排序插入后輸出最后的數字序列&#xff1b; 把主要步驟交給主函數&#xff0c;通過調用函數來實現整體的功能&#xff1a; 寫出主函數&#xff08;這里使用冒泡排序&#xff09;&#xff1a; int main(){int n;int a[10];cin>>n;inputa(a…

【網絡安全】【Frida實踐案例】某圖xx付費功能逆向分析(一)

文章目錄 一、目標應用二、環境三、步驟1、查看布局id2、用到的Log日志類信息3、嘗試hook VIP判斷方法 四、總結五、相關源碼 1、文章僅供學習參考&#xff0c;嚴禁非法使用&#xff01;如非法使用&#xff0c;而導致的一切后果&#xff0c;由使用者自負&#xff01; 2、禁止將…

【C++】string類常用函數用法總結

目錄 常用函數一覽 默認成員函數 與容量有關的函數 part 1 part 2 part 3 與訪問和遍歷有關的函數 與修改有關的函數 npos 與string相關的其它常用函數 常用非成員函數 getline和cin的區別 常用函數一覽 //默認成員函數 string();string(const char* s);string(si…

貓狗分類識別②圖像歸一化-位置和重心歸一化處理

一、導入庫 glob 和 os 都是Python的標準庫模塊&#xff0c;也就是說它們隨Python一起安裝&#xff0c;無需額外安裝即可使用。 glob 模塊提供了一個在目錄中使用通配符搜索創建文件列表的函數&#xff0c;例如&#xff0c;可以使用 glob.glob(*.txt) 來查找當前目錄下所有的…

Android OpenMAX(七)OMX Service

上一篇文章我們分析了Android使用OMXStore來管理平臺上的軟件和硬件編解碼組件,這一篇我們再向上一層了解應用層是如何獲取調用OMXStore管理組件的。本篇文章代碼參考自: frameworks/av/services/mediacodec/main_codecservice.cpp frameworks/av/media/libstagefright/omx/1…

Mybatis Plus ActiveRecord 模式

Mybatis Plus ActiveRecord 模式 使用 DEMO源碼地址 https://gitee.com/JackSong2019/demo-mybatis3.git 前言 ActiveRecord 模式 簡介 ActiveRecord 是一種設計模式&#xff0c;它是一種在軟件開發中用于管理關系數據庫的模式&#xff0c;他簡化了數據庫操作的流程&#xf…

docker八大架構之應用服務集群架構

應用服務集群架構 在之前&#xff0c;一個應用層要負責所有的用戶操作&#xff0c;但是有時用戶增加后就會導致供不應求的現象&#xff08;單個應用不足以支持海量的并發請求&#xff0c;高并發的時候站點響應變慢&#xff09;&#xff0c;這時就需要增加應用層服務器&#xf…

【STM32 |GPIO】GPIO結構、GPIO輸出

目錄 GPIO簡介 GPIO的基本結構 GPIO位結構&#xff08;每一位的具體電路結構&#xff09; 輸入 上拉和下拉電阻 斯密特觸發器 ?編輯 輸出 GPIO模式 ?編輯 浮空輸入、上拉輸入、下拉輸入 模擬輸入 開漏輸出和推挽輸出 復用開漏輸出和復用推挽輸出 LED和蜂鳴器…