1. 程式人生 > 其它 >STL基本用法總結

STL基本用法總結

STL基本用法總結

目錄

vector

  • 元素訪問:
    • [ ]
      • 下標訪問
      • 迭代器訪問(解引用迭代器)
    • front()
    • back()
  • 容量
    • size()
    • empty()
  • 修改器
    • clear():從容器擦除所有元素
    • push_back()
    • pop_back()
    • insert(pos , val):pos為待插入位置的迭代器——可以是尾後迭代器,val為待插入值
    • erase():
      • erase(pos):移除位於 pos 的元素
      • erase(first , last)移除範圍 [first; last) 中的元素,如果first和last相等,區間為空不刪除元素

pair

  • 成員物件
    • first
    • second
  • 構造pair
    • pair<int , string> p( 1 , "str" );
    • pair<int , string> p = { 1 , "str" };
    • pair<int , string> p = make_pair( 1 , "str" );
  • 臨時pair
    • pair<int , string> ( 1 , "str" );
    • make_pair( 1 , "str" );
  • 支援比較運算,以first為第一關鍵字,second為第二關鍵字(字典序)

deque


string

  • 輸入輸出
    • cin cout
    • getline(輸入流 , string物件)
    • printf("%s\n" , str.c_str()) c_str()可以返回string物件儲存字元陣列的首地址
  • 容量
    • size
    • empty
  • 支援比較運算子 按字典序
  • 訪問與修改
    • +/+= 拼接兩個字串(可以與字串字面值相加)
    • insert()
      • insert(pos , str):在pos位置(下標)插入字串str,str可以是string類物件也可以是字串常量
      • insert(it , it2 , it3):在it(迭代器)處插入[it2 , it3) ,it2 ,it3分別是待插入字串的首尾迭代器
    • erase()
      • erase(it)
      • erase(first , last):引數為迭代器,左開右閉
      • erase(pos , length):引數1為下標, 2為刪除長度
    • substr(pos , length)
      • 返回從pos下標開始,長度為length的子串
      • 如果無第二個引數,輸出至尾
      • 若pos+length-1超出下標範圍,同樣輸出至尾
    • clear()

set / multiset

set中無重複元素,multiset可以有

預設升序排序,若想降序:set<int, greater<int>> s

  • insert(key):插入一個數,自動遞增排序
  • find(key):查詢一個數,找到對應迭代器。找不到則返回尾後迭代器
  • count(key):返回值為key的元素數(set只有0或1)
  • erase()
    • erase(key):刪除所有值為key的
    • erase(iter):刪除這個迭代器對應元素
    • erase(first , last)
  • lower_bound(key) :返回指向首個不小於給定鍵的元素的迭代器
  • upper_bound(key):返回指向首個大於給定鍵的元素的迭代器
  • 其他
    • clear()
    • size()
    • empty()
    • 迭代器支援++ --

map / multimap

  • insert():插入的是一個pair
  • find(key):返回指向鍵等於 key的元素的迭代器。若找不到這種元素,則返回尾後迭代器。
  • erase()
    • erase(key):刪除鍵為key的元素
    • erase(iter):刪除這個迭代器對應的元素
    • erase(first , last)
  • 元素訪問
    • 使用[ ]通過下標訪問:如mp[ 'c' ] = 10
    • 使用迭代器:it->first , it->second
  • count(key):返回匹配特定鍵的元素數量
  • lower_bound(key):返回指向首個不小於給定鍵的元素的迭代器
  • upper_bound(key):返回指向首個大於給定鍵的元素的迭代器
  • 其他
    • clear()
    • size()
    • empty()
    • 迭代器支援++ --

unordered_set / unordered_multiset

unordered_map / unordered_multimap

與前面類似,不過前面是使用紅黑樹作為底層實現,此處底層實現為雜湊表。

增刪改查O(1)

不支援lower_bound() , upper_bound()

迭代器支援++,不支援--


容器介面卡queue

  • 元素訪問
    • front()
    • back()
  • 修改器
    • push()
    • pop()
  • 容量
    • empty()
    • size()

容器介面卡stack

  • 元素訪問
    • top()
  • 修改器
    • push()
    • pop()
  • 容量
    • empty()
    • size()

容器介面卡priority_queue(優先佇列/堆)

預設情況下會建立大根堆,若想建立小根堆priority_queue<int , vector<int> , greater<int>> heap;

  • 引數2是承載底層資料結構堆的容器(因為元素型別是int,所以是vector)

  • 引數3是對引數1的比較類

    • std::greater()
      • greater是第一個元素是否比第二個元素更大,如果是返回true否則返回false
      • 按greater規則排序會使前一個元素比後一個更大(例如a和b按某規則cmp比較,返回true的話a就排前面)
    • 解釋:例如小根堆,我們想要新插入元素(在最低層)比其父節點大,那麼使用greater規則。greater(newnode , father)
  • 元素訪問

    • top()
  • 修改器

    • push()
    • pop()
  • 容量

    • empty()
    • size()