• $C++ STL$总结


    目录

    $vector$

    $queue$

    $priority\_queue$

    $deque$

    $set,multiset$

    $map,multimap$

    $bitset$

    常用函数$algorithm$


    ♦$vector<int> a$

    $size/empty$

    $a.size()$返回$a$的元素个数

    $a.empty()$返回$bool$类型,即$a$是否为空

    $clear$

    $a.clear()$表示把$a$清空

    迭代器

    类似指针,可以与整数相加减,可以两个迭代器之间相加减

    $vector<int>::iterator it$

    $begin/end$

    $a.begin()$返回第一个元素的迭代器,若$a$非空,则$*a.begin()$与$a[0]$作用相同

    $a.end()$返回最后一个元素后面的位置的迭代器,即$*a.end()$和$a[a.size()]$都是越界访问

    $front/back$

    $a.front()$返回第一个元素,相当于$*a.begin()$和$a[0]$

    $a.back()$返回最后一个元素,相当于$*(--a.end())$和$a[a.size()-1]$

    $push\_back/pop\_back$

    $a.push\_back(x)$表示把元素$x$插入到$a$的尾部

    $a.pop\_back()$表示删除$a$的最后一个元素

    $go back$


    ♦$queue<int> q$

    循环队列$queue$

    $push/pop$

    $q.push(x)$表示将元素$x$从队尾插入队列中

    $q.pop()$表示将队头的第一个元素弹出

    $front/back$

    $q.front()$返回队头第一个元素

    $q.back()$返回队尾第一个元素

    $go back$


    ♦$priority\_queue<int> q$

    优先队列$priority\_queue$,相当于一个大根堆

    $push/pop/top$

    $q.push(x)$表示插入元素$x$

    $q.pop()$表示弹出堆顶元素

    $q.top()$表示返回堆顶元素

    重载“$<$”运算符

    $go back$


    ♦$deque<int> q$

    双端队列支持在两端快速插入或删除元素且支持随机访问

    $[]$

    支持随机访问,$q[x]$表示$q$中的第$x+1$个元素

    $begin/end$

    类似$vector$

    $front/back$

    类似$queue$

    $push\_front/push\_back$

    $q.push\_front(x)$表示将$x$从队头入队

    $q.push\_back(x)$表示将$y$从队尾入队

    $pop\_front/pop\_back$

    $q.pop\_front()$表示弹出队头元素

    $q.pop\_back()$表示弹出队尾元素

    $clear$

    $q.clear()$即清空队列

    $go back$


    ♦$set<int> s,multiset<int> s$

    $set$是有序集合,$multiset$是有序多重集合,和单调队列一样是定义“$<$”运算符

    $size/empty/clear$

    类似$vector$

    迭代器

    $set,multiset$不支持随机访问,迭代器仅支持$++,--$两种运算

    $set<int>::iterator it$

    $multiset<int>::iterator it$

    $begin/end$

    类似$vector$

    $insert$

    $s.insert(x)$表示插入元素$x$

    若$set$中已经存在$x$,则忽略该次操作

    $find$

    $s.find(x)$表示寻找等于$x$的元素,返回指向该元素的迭代器

    若不存在返回$s.end()$

    $multiset$中有重复元素可能是返回第一个的迭代器,但未经尝试,建议使用$lower\_bound$

    $lower\_bound/upper\_bound$

    $s.lower\_bound(x)$返回$ge x$中最小的一个元素的迭代器,如果$multiset$中有重复则返回第一个

    $s.upper\_bound(x)$返回$>x$中最小的一个元素的迭代器

    这两个函数和$find$一样如果找不到就返回$s.end()$

    $erase$

    $it$为迭代器,则$s.erase(it)$表示删除元素$*it$

    $x$为元素,则$s.erase(x)$表示删除所有等于$x$的元素

    如果要删除的元素不存在,则忽略这个操作

    $count$

    $s.count(x)$返回集合中元素$x$的个数,在$set$中返回值只可能是$0$或$1$,则可以用于判断元素$x$在$set$中是否存在

    $go back$


    ♦$map,multimap$

    $map$容器是一个键值对$(key-value)$映射,$key$需要定义“$<$”符号

    定义举例如下

    $map<long long,bool> vis$

    $map<string,int> hash$

    $map< pair<int,int>,vector<int> > test$

    $size/empty/clear/begin/end$

    类似$set$

    迭代器

    $map$的迭代器与$set$类似,但是解除引用后得到的是一个二元组

    $insert/erase$

    类似$set$,$insert$的参数是$pair$,$erase$的参数可以是迭代器也可以是$pair$

    $find$

    $s.find(x)$表示在变量名为$s$的$map$中查找$key$为$x$的二元组,返回指向该二元组的迭代器

    $[]$

    $s[key]$返回$key$映射到的$value$

    如果查找的$key$不存在,则执行$s[key]$后,$s$会自动新建一个二元组$(key,zero)$,建议在使用$[]$前先使用$find$查找,然后用$[]$操作赋值

    $go back$


    ♦$bitset$

    定义

    $bitset<n> s$表示一个$n$为二进制数

    位运算

    $~s$:对$s$按位取反

    $$,|,$^:返回对两个位数相同的$bitset$按位运算的结果

    $<<,>>$:返回把一个$bitset$左移、右移后的结果

    $==,!=$:比较两个$bitset$代表的二进制数是否相等

    $[]$

    $s[k]$表示$s$从右往左数第$k-1$位,可以取值也可以赋值

    $count$

    $s.count()$返回$s$有多少位$1$

    $any/none$

    $s.any()$返回$s$中是否至少有一位为$1$,$s.none()$返回$s$中是否全为$0$

    $set/reset/flip$

    $s.set()$把$s$所有位变为$1$,$s.set(k,v)$表示把$s$的第$k$位改为$v$,即$s[k]=v$

    $s.reset()$把$s$所有位变为$0$,$s.reset(k)$表示把$s$的第$k$位改为$0$,即$s[k]=0$

    $s.flip()$把$s$的所有位取反,即$s=~s$,$s.flip(k)$把$s$的第$k$位取反,即$s[k]$^$=1$

    $go back$


    ♦常用函数$algorithm$

    常用的几个对序列操作的函数,对下标处于$[l,r)$中的元素执行操作

    $reverse$翻转

    翻转$vector<int> a$:$reverse(a.begin(),a.end())$

    翻转数组$int a[n]$:$reverse(a+1,a+1+n)$

    $unique$去重

    返回去重后的尾迭代器,依然为前闭后开区间,$m$记录去重后的元素个数。

    把$vector<int> a$去重:$m=unique(a.begin(),a,end())-a.begin()$

    把数组$int a[n]$去重:$m=unique(a+1,a+1+n)-(a+1)$

    $random\_shuffle$随机打乱

    用法同$reverse$

    $lower\_bound/upper\_bound$二分

    $lower\_bound$返回第一个$ge x$的元素的位置的迭代器,$upper\_bound$返回第一个$>x$的元素的位置的迭代器

    前提保证查找的区间$[l,r)$是有序的

    在数组$int a[n]$中查找$ge x$的最小整数的下标$i=lower\_bound(a+1,a+1+n,x)-a$

    在$vector<int> a$中查找$le x$的最大整数$y=*(--upper\_bound(a.begin(),a.end(),x))$

    $go back$

  • 相关阅读:
    2017暑期集训Day 1
    17-06-28模拟赛
    17-06-26模拟赛
    平衡树学习笔记
    指针学习笔记
    17-06-14模拟赛
    17-06-11模拟赛
    17-06-02模拟赛
    17-05-31模拟赛
    培训补坑(day1:最短路&two-sat)
  • 原文地址:https://www.cnblogs.com/THWZF/p/11836131.html
Copyright © 2020-2023  润新知