算法基礎(chǔ)第二講(C++常見的STL容器)

本文主要總結(jié)了常見的STL容器用法,備忘。詳細請見STL用法。

1.vector

  • 變長數(shù)組,倍增思想,系統(tǒng)為某一程序分配空間,所需時間與空間大小無關(guān),與申請次數(shù)有關(guān)

  • a.size()

  • a.empty()

  • clear()

  • front()/back()

  • push_back()/pop_back()

  • begin()/end()

  • []隨機取址

  • 支持比較運算 按照字典序比較

  • erase 復雜度O(n)

#include<vector>

vector<int> a(10,3)

//3種遍歷方式
for(int i=0;i<a.size();i++)cout<<a[i]<<" ";

for(vector<int>::iterator i= a.begin();i<a.end();i++)cout<<*i<<" ";

for(auto it:a)cout<<it<<" ";

2 pair

  • 可以存儲二元組,類型任意
  • p.first p.second
  • 支持比較運算,以first為第一關(guān)鍵字,以second為第二關(guān)鍵字
  • 多種屬性 pair<int,pair<int,int>>
  • 應(yīng)用場景:
    • 某個對象擁有兩種屬性,且需要排序
    • 可以看成實現(xiàn)了一個二元結(jié)構(gòu)體,并實現(xiàn)了比較函數(shù)

3 string

  • 字符串加減操作
  • substr(start,length)
  • printf("%s\n",a.c_str()) //a.c_str() 返回起始地址

4 queue 隊列

  • size()
  • empty()
  • push()/pop()
  • front()/back()
  • 清空queue,重新構(gòu)造 q=queue<int>()

5 priority_queue 優(yōu)先隊列

  • 默認大根堆
    • priority_queue<int> heap
  • 如何構(gòu)建小根堆
    • 黑科技,負數(shù)大法
    • priority_queue<int,vector<int>,greater<int>> heap

6 stack 棧

  • push/pop
  • empty
  • top
  • size()

7 deque

  • size
  • empty
  • clear
  • front/back
  • push_back/pop_back
  • push_front/pop_front
  • begin/end
  • []

8 set、multiset,

  • 時間復雜度log(n)
  • 基于平衡二叉樹(紅黑樹),動態(tài)維護有序序列
  • size()、empty()、clear()
  • insert 函數(shù)
  • find 查找函數(shù) 不存在返回end迭代器
  • count()
  • begin()/end() 支持++,--操作,返回前驅(qū)和后繼
  • erase
    • 輸入一個數(shù),刪除x 復雜度k+log(n)
    • 輸入一個迭代器,刪除這個迭代器
  • lower_bound() 大于等于x最小的數(shù)
  • upper_bound 大于x最小的數(shù)

9 map、multimap

  • insert() 插入的是一個pair

  • erase() 輸入的參數(shù)是pair 或者迭代器

  • find

  • [] 時間復雜度為log(n)

    #include<set>
    
    map<string,int> a;
    a["abc"]=1;
    

10 其他

  • unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表
  • 和上面類似,增刪改查的時間復雜度都是O(1)
  • 不支持基于排序的操作lower_bound() upper_bound()、++ --

11 bitset

  • 經(jīng)典應(yīng)用場景
  • 支持操作
    • ~ & | ^
    • >> <<
    • == !=
    • []
    • count() 返回有多少個1
    • any()判斷是否至少有一個1
    • none() 判斷是否全為0
    • set() 把所有位置1
    • set(k,v)把第k位置v
    • reset()把所有位置0
    • flip() 等價于 ~
    • flip(k) 將第k位取反
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容