8.C++中的STL(标准模板库)

(1)vector, 变长数组,倍增的思想

  • 头文件 #include <vector>

  • ​ size() 返回元素个数

  • ​ empty() 返回是否为空

  • ​ clear() 清空

  • ​ front()/back() 返回首、尾元素

  • ​ push_back()/pop_back() 压入、弹出末尾元素

  • ​ begin()/end() begin()=a[0],end()=a[size]

  • 支持比较运算,如a(3,4),b(3,5),a<b,即按字典序

(2)pair<int, string> 可以存储一个二元组

  • ​ first, 第一个元素
  • ​ second, 第二个元素
  • ​ 支持比较运算,以first为第一关键字,以second为第二关键字,按字典序

**(3)string,**字符串

  • #include <string>

  • ​ size()/length() 返回字符串长度

  • ​ empty() 判断为空

  • ​ clear() 清空

  • ​ substr(起始下标,(子串长度)) 返回子串

  • ​ c_str() 返回字符串所在字符数组的起始地址

(4)queue, 队列

  • #include <queue>

  • ​ size()

  • ​ empty()

  • ​ push() 向队尾插入一个元素

  • ​ front() 返回队头元素

  • ​ back() 返回队尾元素

  • ​ pop() 弹出队头元素

(5)priority_queue, 优先队列,即堆,默认是大根堆

  • #include <queue>

  • ​ size()

  • ​ empty()

  • ​ push() 插入一个元素

  • ​ top() 返回堆顶元素

  • ​ pop() 弹出堆顶元素

  • ​ 定义成小根堆的方式:priority_queue<int, vector, greater> q;

(6)stack, 栈

  • #include <stack>

  • ​ size()

  • ​ empty()

  • ​ push() 向栈顶插入一个元素

  • ​ top() 返回栈顶元素

  • ​ pop() 弹出栈顶元素

(7)deque, 双端队列

  • #include <deque>

  • ​ size()

  • ​ empty()

  • ​ clear()

  • ​ front()/back()

  • ​ push_back()/pop_back()

  • ​ push_front()/pop_front()

  • ​ begin()/end()

(8)set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列 size() empty() clear() begin()/end() ++, — 返回前驱和后继,时间复杂度 O(logn)

set/multiset set去重,mulset可以有重复元素

  • ​ insert() 插入一个数
  • ​ find() 查找一个数
  • ​ count() 返回某一个数的个数
  • ​ erase()
    • ​ (1) 输入是一个数x,删除所有x O(k + logn)
    • ​ (2) 输入一个迭代器,删除这个迭代器
  • ​ lower_bound()/upper_bound()
    • ​ lower_bound(x) 返回大于等于x的最小的数的迭代器
    • ​ upper_bound(x) 返回大于x的最小的数的迭代器

**map/multimap **

  • ​ insert() 插入的数是一个pair
  • ​ erase() 输入的参数是pair或者迭代器
  • ​ find() 查找一个数
  • ​ map可以像数组一样使用 :如map<string,int> a; a[“string”]=1;(注意multimap不支持此操作。 时间复杂度是 O(logn))
  • ​ lower_bound()/upper_bound()

(9)unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表

  • ​ 和上面set, map, multiset, multimap类似,增删改查的时间复杂度是 O(1)
  • ​ 不支持 lower_bound()/upper_bound(), 迭代器的++,—

(10)bitset, 圧位,可以省8位空间,一个字节当8个字节用 bitset<10000> s;

  • 支持各种位运算 ~, &, |, ^、>>, <<、==, !=

  • count() 返回有多少个1

  • any() 判断是否至少有一个1

  • none() 判断是否全为0

  • set() 把所有位置成1

  • set(k, v) 将第k位变成v

  • reset() 把所有位变成0

  • flip() 等价于~

  • flip(k) 把第k位取反