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()
posted @ 2022-03-31 21:17  KyleChen_whu  阅读(145)  评论(0)    收藏  举报