欢迎来到CJY的博客|

wenli7363

园龄:3年3个月粉丝:7关注:6

【ACWING】STL简单教程

0 概述

  • vector,变长数组,倍增思想:每次数组长度不够,就开一个2倍长度的新空间,然后原来的元素copy到新空间

倍增思想有一个好处,就是申请空间越频繁,效率越高

  • string 字符串, substr(), c_str()

  • queue, 队列,push(),front(),pop()

  • priority_queue, 优先队列(堆),默认大根堆

    1. push()
    2. top() 输出堆顶元素
    3. pop()弹出堆顶元素
  • stack,栈,push(),top(),pop()

  • deque,双端队列

  • set,map,multiset,multimap 基于红黑树,动态维护有序序列

  • unordered_set, unordered_map, unordered_multiset, unordered_multimap 基于哈希表实现

  • bitset 压位

// 所有容器都有这两个函数,且为O(1)时间复杂度
a.size() //求当前已有的元素大小
a.empty() //判空
a.clear() // 注意,队列、栈没有

1 vecotr

  • size()
  • empty()
  • clear()
  • front() / back() 返回第一个/最后一个数
  • push_back()/pop_back()
  • begin()/end()
  • [] 支持随机寻址
  • 支持比较运算,按字典序比较

2 pair

支持比较大小,字典序

pair<int,string> p;
p = make_pair(10,"cjy");
p = {20 ,"cjy"};
//取元素
cout<< p.first <<endl;
cout<< p.second

3 string

  • size(),empty(),clear()
  • substr() a.substr(1,3) ->a字符串从1开始取3个长度的子串,相当于a[1,3]左闭右闭的切片
  • c_str() 返回字符串首址

4 queue

  • push(),size(),empty(),front(),back(),pop()
  • 队列没有clear函数,只能新建一个空队列覆盖原来的q
queue<int> q;
q = queue<int>();

5 priority_queue

  • push()
  • pop() 弹出堆顶元素
  • top() 返回堆顶元素

默认大根堆,如何变成小根堆

priority_queue<int> heap;
heap.push(-x); //插入的数取负号
//法2,直接定义小根堆
priority_queue<int,vector<int>,greater<int>> heap;
// 高优先级的先进队,但是优先队列是

6 stack

  • push(), pop(), top()

7 deque 双端队列

加强版vector,但是用的不多(慢)

  • size(), empty(),clear()
  • front()/back() 返回元素
  • push_back()/ pop_back()
  • push_front()/pop_front()
  • begin()/end()
  • []

8 set/multiset

set不允许有重复元素,multiset允许有重复元素

  • size(), empty(), clear()
  • insert() 插入一个数
  • find() 查找一个数,找不到就返回end迭代器
  • count() 统计某个数的个数
  • erase()
    • 如果输入是x,那么就删除其中所有的x -----复杂度O(k + logn)
    • 如果输入一个迭代器,那么就删除迭代器

下面两个和排序有关

  • lower_bound()/upper_bound : 最小下界/最大上界 的迭代器,找不到就返回end迭代器
  • ++,-- 返回后继/前驱 的数 -------复杂度O(logn)

9 map/mutimap

一个映射,相当于字典 以pair形式输入

  • insert() ---- 插入的数是pair
  • erase() ---输入迭代器orpair
  • find()
  • [],类似python那样字典进行索引,但是时间复杂度O(logn)
  • lower_bound() / upper_bound()
  • ++,--
map<string,int> a;
a["cjy"] = 1;
cout<<a["cjy"]<<endl;

9.1 无序容器

unordered_map / unordered_set / unordered_multiset / unordered_multimap / 哈希表

绝大部分操作类似,但是增删改查时间复杂度O(1)

不支持lower_bound/upper_bound/ 迭代器++,--

10 bitset 压位

C++中一个bool类型是1byte,也就是8bit,用压位存就是01数组,可以节省8倍空间

// 初始化
bitset<1000> s; //非常不同,<这里存压位大小,而不是类型>
// 支持所有位运算
~s, &s, ^s, |s
>> , <<
// 关系运算符
== , !=
// 取出某一位
s[]
// 一些函数
cout() //返回有多少个1
any() // 判断是否至少有一个1
none() //判断是否有全为0
set() //所有位置1
set(k,v) //将第K位置为v
reset() //所有位置0
flip() //所有位取反
flip(K) //k位取反
posted @   wenli7363  阅读(34)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起