算法基础第二讲(C++常见的STL容器)

本文主要总结了常见的STL容器用法,备忘。详细请见STL用法。

1.vector

  • 变长数组,倍增思想,系统为某一程序分配空间,所需时间与空间大小无关,与申请次数有关

  • a.size()

  • a.empty()

  • clear()

  • front()/back()

  • push_back()/pop_back()

  • begin()/end()

  • []随机取址

  • 支持比较运算 按照字典序比较

  • erase 复杂度

#include

vector a(10,3)

//3种遍历方式
for(int i=0;i::iterator i= a.begin();i

2 pair

  • 可以存储二元组,类型任意
  • p.first p.second
  • 支持比较运算,以first为第一关键字,以second为第二关键字
  • 多种属性 pair>
  • 应用场景:
    • 某个对象拥有两种属性,且需要排序
    • 可以看成实现了一个二元结构体,并实现了比较函数

3 string

  • 字符串加减操作
  • substr(start,length)
  • printf("%s\n",a.c_str()) //a.c_str() 返回起始地址

4 queue 队列

  • size()
  • empty()
  • push()/pop()
  • front()/back()
  • 清空queue,重新构造 q=queue()

5 priority_queue 优先队列

  • 默认大根堆
    • priority_queue heap
  • 如何构建小根堆
    • 黑科技,负数大法
    • priority_queue,greater> heap

6 stack 栈

  • push/pop
  • empty
  • top
  • size()

7 deque

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

8 set、multiset,

  • 时间复杂度
  • 基于平衡二叉树(红黑树),动态维护有序序列
  • size()、empty()、clear()
  • insert 函数
  • find 查找函数 不存在返回end迭代器
  • count()
  • begin()/end() 支持++,--操作,返回前驱和后继
  • erase
    • 输入一个数,删除x 复杂度
    • 输入一个迭代器,删除这个迭代器
  • lower_bound() 大于等于x最小的数
  • upper_bound 大于x最小的数

9 map、multimap

  • insert() 插入的是一个pair

  • erase() 输入的参数是pair 或者迭代器

  • find

  • [] 时间复杂度为

    #include
    
    map a;
    a["abc"]=1;
    

10 其他

  • unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表
  • 和上面类似,增删改查的时间复杂度都是
  • 不支持基于排序的操作lower_bound() upper_bound()++ --

11 bitset

  • 经典应用场景
  • 支持操作
    • ~ & | ^
    • >> <<
    • == !=
    • []
    • count() 返回有多少个1
    • any()判断是否至少有一个1
    • none() 判断是否全为0
    • set() 把所有位置1
    • set(k,v)把第k位置v
    • reset()把所有位置0
    • flip() 等价于 ~
    • flip(k) 将第k位取反

你可能感兴趣的:(算法基础第二讲(C++常见的STL容器))