C++ STL常见容器API总结

511 阅读2分钟

👉 “Offer 驾到,掘友接招!我正在参与2022春招打卡活动点击查看 活动详情

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

STL常见容器API总结

vector,变长泛型数组,常用函数

  • size() 返回元素个数
  • empty() 返回是否为空
  • clear() 清空
  • front()/back()
  • push_back()/pop_back()
  • begin()/end() 迭代器,返回指针
  • []
  • insert() 指定位置插入元素
vector<int> a(n);  // 定义长度为 n 的 vector,初始值默认为0
vector<int> a(10, 1);  // 长度为 10 的 vector ,所有元素都是 3

string, 字符串类

  • size()/length() 返回字符串长度,注意size()返回的是unsigned int
  • empty() 判空
  • clear() 清空
  • substr() 返回子串,第一个参数为起始位置,第二个参数时子串的长度,与java等其他语言不同
  • find() 查找字符串/字符是否存在,存在返回第一次出现的下标起始值
  • find_first_of() 查找字符第一次出现的位置
  • find_last_of() 查找字符最后一次出现的位置

stack, 栈

  • size()
  • empty()
  • push() 向栈顶插入一个元素
  • top() 返回栈顶元素
  • pop() 弹出栈顶元素

queue, 队列

  • size()
  • empty()
  • push() 向队尾插入一个元素
  • front() 返回队头元素
  • back() 返回队尾元素
  • pop() 弹出队头元素

deque, 双端队列

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

priority_queue, 优先队列,默认是大根堆

  • size()
  • empty()
  • push() 插入一个元素
  • top() 返回堆顶元素
  • pop() 弹出堆顶元素
//若要使用小根堆,可以将元素取为负数再push到大根堆中,或者采用以下定义方式
// 定义小根堆
priority_queue<int, vector<int>, greater<int>> pq; // less<int> 大根堆

set, map, 基于红黑树

  • size()
  • empty()
  • clear()
  • begin()/end()
  • ++, -- 返回前驱和后继,时间复杂度 O(logn)

判断 set<int> st 是否存在值,用 st.find(key) != st.end() or st.count(key),存在的话,是不等于。

PS:注意关联容器中的key都是const类型,即不能直接修改key,如果需要修改key,需要先删除以后再插入

set/multiset

  • insert() 插入一个数

  • find() 查找一个数

  • count() 返回某一个数的个数

  • erase()

    • 输入是一个数x,删除所有x
    • 输入一个迭代器,删除这个迭代器
  • lower_bound()/upper_bound()

    • lower_bound(x) 返回大于等于x的最小的数的迭代器
    • upper_bound(x) 返回大于x的最小的数的迭代器

set里面不能有重复元素,multiset可以。

map/multimap

  • insert() 插入的数是一个pair
  • erase() 输入的参数是pair或者迭代器
  • find()
  • [] 注意multimap不支持此操作。 时间复杂度是 O(logn)
  • lower_bound()/upper_bound()

判断 map<int, int> mp是否存在键值,用 mp.count(key)

bitset, 位图

  • bitset<10005> s;
  • ~, &, |, ^
  • >>, <<
  • ==, !=
  • []
  • count() 返回有多少个1
  • any() 判断是否至少有一个1
  • none() 判断是否全为0
  • set() 把所有位置成1
  • set(k, v) 将第k位变成v
  • reset() 把所有位变成0
  • flip() 等价于~取反
  • flip(k) 把第k位取反