C++ STL 总结

C++ STL 总结

vector

变长数组

  • 用途
    1. 存储数据,尤其是数量不定的时候
    2. 可以用于实现图的邻接表
  • 方法
    1. 迭代器: vector::iterator it;
    2. 下标访问: vi[1]
    3. push_back()
    4. pop_back()
    5. insert(it, x)
    6. size() clear() empty()
    7. erase(it) erase(it_begin, it_end)

set

内部使用红黑树,自动有序,不含重复元素的“数组” (unordered_set 是用hash实现的)

  • 用途
    1. 去掉重复元素,保留元素本身,不考虑它的个数 (去重)
  • 方法
    1. 迭代器: set::iterator it;
    2. insert(x)
    3. find(value)
    4. erase(it) erase(value) erase(it_begin, it_end)
    5. size() clear() empty()

string

  • 方法
    1. 迭代器 string::iterator it
    2. 下标访问 str[i]
    3. 加法 + +=
    4. 比较 == != < <= > >= 比较规则是字典序
    5. length() / size()
    6. insert:
      1. insert(pos_idx, string)
      2. insert(it, it_begin, it_end)
    7. erase:
      1. erase(it)
      2. erase(pos, length)
      3. erase(it_begin, it_end)
    8. substr:
      1. substr(pos, length)
    9. clear() O(1)
    10. string::npos == -1 unsigned_int 或 4294967295
    11. find()
      1. find(str)
      2. find(str, pos)
    12. replace:
      1. replace(pose, len, str2)
      2. replace(it_b, i_e, str2)

map

数组是int->任意类型的映射,map是任意类型->任意类型的映射

  • 用途
    1. 建立字符(串)->int/string映射,减少代码量
    2. 判断大整数或者其他类型的数据是否存在,用作bool数组
  • 方法
    1. 迭代器访问 map<type1, type2>::iterator it
    2. 下标访问 mp[example] 也可以赋值
    3. find(key) 返回 iter, iter->first, iter->second
    4. erase:
      1. erase(it)
      2. erase(key)
      3. erase(it_begin, it_end)
    5. size() clear() empty()

queue

队列,先进先出的数组

  • 用途

    1. 广度优先搜索
  • 方法

    1. 访问:front() 队头 back() 队尾
    2. push(value)
    3. pop()
    4. empty() size() 没有clear() 可以直接新建一个queue

priority_queue

带优先级的队列,其实是个堆,队首元素一定是优先级最高的那个,每一次出队入队都会进行排序

  • 用途

    1. 贪心问题
    2. 优化迪杰斯特拉算法
  • 方法

    1. 访问: 只有 top() 访问队首元素
    2. push(value) O(logN)
    3. pop() O(logN)
    4. empty() size()

stack

后进先出的容器

  • 用途
    1. 模拟递归
  • 方法
    1. 访问: 只有top()访问栈顶元素
    2. push(value) O(1)
    3. pop(value) O(1)
    4. empty() size()

pair

将两个元素绑在一起,类似内部包含两个元素的的结构体,first,second

  • 用途
    1. 替代二元结构体及其构造函数,节省编码时间
    2. 作为map的键值对进行插入 mp.insert(make_pair(key, value))
  • 方法
    1. 构造:
      1. pair<type1, type2> p (key, value);
      2. p = make_pair(key, value)
      3. p = pair<type1, type2>(key, value)
    2. 访问:
      1. p.first p.second 两个字段
    3. 比较: pair 可以直接== != < <= > >= 比较, 比较规则是先比first,当first相等时,比较second

algorithm

  1. max(x, y) min(x, y) abs(x)
  2. swap(x, y)
  3. reverse(it_begin, it_end) 翻转序列元素排列
  4. next_permutation(it_begin, it_end)
  5. fill(it_begin, it_end, value) 把序列中每一个元素赋值为value
  6. sort(it_begin, it_end, cmp) > 降序 < 升序
  7. lower_bound(it_begin, it_end, value) upper_bound(it_b, it_e, value) 返回有序序列中,value的第一个出现的指针或者it,以及最后出现位置的下一个位置的指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值