STL 一些经常用到的东西 stack queue deque vector map set unique lower_bound()

先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件

一、栈和队列  

1 栈 :一种线性表  

    特点  后进先出

   头文件  #include<stack>

   声明  stack< 类型 > sk(变量);  注意  这里的类型  如果是char只能是单个字符 如果要存字符串要用string

  • sk.push();           向里存  写在括号里
  • sk.pop();             出栈 把最上面的出栈(即所谓的先进后出  注意  这里的不能赋值给别的变量 括号里也不能写东西
  • data = sk.top();   取出栈顶的元素赋值给一个变量 (不出栈
  • size = sk.size();  栈里元素的个数
  • sk.empty();         判定栈是否为空

注意 要清空栈  没有函数 要自己写

while(!sk.empty())
{
    sk.pop();
}

2 队列

   特点   先进先出  (类似于排队买饭

  头文件  #include<queue>

  声明  queue< 类型 > q(变量);

  • q.push();             向里存  写在括号里
  • q.pop();               出队列 把队首的出队列(即所谓的先进先出  注意  这里的不能赋值给别的变量 括号里也不能写东西
  • data = q.front();   获得队列首的元素赋值给一个变量 (不出队列
  • q.back();              获得队尾的值 同q.front();
  • size = q.size();     队列里元素的个数
  • q.empty();            判定队列是否为空
  • q.clear();              清空队列

3 双端队列

    特点  两端都可以进出

   头文件  #include<deque>

   声明  deque< 类型 > dq(变量);

  • dq.push_front();           向双端队列首存  写在括号里
  • dq.push_back();           向双端队列尾存  写在括号里
  • dq.pop_front();             将双端队列的队首元素出双端队列 
  • dq.pop_back();             将双端队列的队尾元素出双端队列 
  • data = dq.front();          获得双端队列首的元素赋值给一个变量 (不出双端队列
  • q.back();                       获得双端队列尾的值 同q.front();
  • dq.empty();                  判定双端队列是否为空
  • dq.clear();                      清空双端队列

4 优先队列(暂时不会。。大佬的...

   特点 自动按升降序排序

    头文件 #include<queue>

    priority_queue < 类型 > q;                                                      默认大小排序从大到小   

    priority_queue < 类型 ,vector <类型>, greater<类型> > q;   默认大小排序从小到大

    priority_queue < 类型 ,vector <类型>, less<类型> > q;        默认大小排序  从大到小

  • q.push();           向里存  写在括号里
  • q.pop();             出队列  队首
  • data = q.top();   取出队首的元素赋值给一个变量 (不出栈
  • size = q.size();  队列里元素的个数
  • q.empty();         判定队列是否为空
  • 可以用cmp来替代greater less 
    struct cmp{
        bool operator () (const int a,const int b ) const {
        //这里和正常的cmp写法一样
        }
    };

     

5 unique(     ,     )    去重       lower_bound()   upper_bound()

emmmm 没事看看

6 set  

    set <  类型 > q; 集合   自带排序   迭代器  

     q.insert();  插入

     q.erase();  插入  

      q.lower_bound();

     迭代器   set  <  类型  >  :: iterator it;

     it = q.begain();

     for(it = q.begain() ; it ! = q.end() ; it++)

       *it

   两个查询

   it=q.find();  返回迭代器

    q.count();  返回0或1

  运算符重载

6 map 

     map< 类型,类型 > m;

                键     值   

     迭代器   map  <  类型  >  :: iterator it;

     it = q.begain();

     注意这里的类型可以是结构体不过要重新定义他的排序方式  默认类型(例如int long 之类的是定义过的  ) 如果不定义(或者少定义会使得排序和查询过程中的错误)的话结果就不对 一定要每个都说明  !!!! 

我是看这个dalao学的...

struct QWE
{
    LL a,b,c;
    bool operator<(const QWE& tmp) const
    {
        if(a==tmp.a&&b==tmp.b)
            return c<tmp.c;
        if(a==tmp.a)
            return b<tmp.b;
        return a<tmp.a;
    }
}

    反向迭代器  map<   >   :: revecs_ iterator it;

     for(it = q.rbegain() ; it ! = q.rend() ; it++)

7 strstr() strchr()

做题时候偶然发现的函数在ctring中(string.h中好像也有) 功能是查找第一个串中的第二个串,第二个功能是在第一个串中查找单个字符

//ps 为什么要写呢 因为好像这个函数的速度比kmp和BM快说是o(1) 所以仅供参考

8 说一下c++的string

类似于char [] 的字符串数组 但是可以直接赋值(相当于给字符串定义了一个系统规则使它变得和int之类的类似)

但是只能用cin cout输入输出//可能是我暂时还没找到用scanf 和 printf输入输出的方法

题取子串的函数是:substr(),形式如下:
s.substr(); //返回s的全部内容
s.substr(11); //从索引11往后的子串
s.substr(5,6); //从索引5开始6个字符
把两个字符串结合起来的函数是+。

9 sort();

太菜了  现在才知道sort也能用来排vector

举个例子
vector<int>q;
q.push_back(1);
q.push_back(3);
q.push_back(-2);
sort(q.begin(),q.end());

10 lower_bound()

和sort一样是三个参数除了最后一个是写你要查的什么其他两个和sort一样  返回第一个大于或等于第三个参数的地址

11 next_permutation();

这个函数用来求下一个排列

#include<algorithm>
int p[10];
int main()
{
   next_permutation(p,p+n);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值