zoukankan      html  css  js  c++  java
  • $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$

  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/THWZF/p/11836131.html
Copyright © 2011-2022 走看看