zoukankan      html  css  js  c++  java
  • 几种stl的应用

    1.set(特点:插入后元素自动从小到大排序)

    set< int > ::iterator it;//迭代器,可以指向同类型的集合

    q.find(k);//其中一个元素k的地址

    q.count(k);//k的个数

    q.erase(k);//删除所有值为k的元素

    q.erase(it);删除it指向的地址和元素

    NOTE:删除后指针指向不变

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<string.h>
    #include<set>
    using namespace std;
    int main()
    {
             multiset<int>q;
             multiset<int>::iterator it;
             //*****插入*****//
             for(int i=1;i<16;i+=2)
                      q.insert(i);
             q.insert(5),q.insert(11);
             for(it=q.begin();it!=q.end();it++)
                      printf("%-3d",*it);printf("
    ");
             //set自动排序1  3  5  5  7  9  11 11 13 15
             //*****查询相同元素个数*****//
             printf("%d
    ",(int)q.count(5));//查询5的个数:2
             //*****删除一个·指定元素*****//
             it=q.find(5);//q中的一个5的地址
             q.erase(it);//删去了一个5
             for(it=q.begin();it!=q.end();it++)
                      printf("%-3d",*it);printf("
    ");
             //1  3  5  7  9  11 11 13 15
             //*****删除全部指定元素*****//
             q.erase(11);//删除全部11
             for(it=q.begin();it!=q.end();it++)
                      printf("%-3d",*it);printf("
    ");
             //1  3  5  7  9  13 15
             //*****删除尾元素*****//
             it=q.end();//q,end()不存在元素
             q.erase(--it);//删去q.end()前面一个地址
             for(it=q.begin();it!=q.end();it++)
                      printf("%-3d",*it);printf("
    ");
             //1  3  5  7  9  13
             //*****查询大于等于所选元素的地址*****//
             q.insert(9);//1 3 5 7 9 9 13
             it=q.lower_bound(9);printf("%d
    ",*it);//9
             //求大于等于9的第一个数的地址
             //*****查询大于所选元素的地址*****//
             it=q.upper_bound(9);printf("%d
    ", *it);//13
             //求大于9的第一个数的地址
             return 0;
    }
    

    2.vector

    sort(q.begin(),q.end())//对vector里的元素进行排序
    q.erase(unique(q.begin(),q.end()),q.end()); //截取重复的元素
    q.insert(q.begin()+i,a);//在第i+1个元素前插入a 
    q.erase(q.begin()+i,q.begin()+j);//删除区间[i,j)内元素 (区间从0开始)

    NOTE:删除后指针指向下一个元素

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector<int>v;
    int main()
    {
             for(int i=1;i<16;i+=2)
                      v.push_back(i);
             v.push_back(2),v.push_back(5);
             //vector<int>::iterator it;
             for(int i=0;i<v.size();i++)
                      printf("%-3d", v[i]);printf("
    ");
             //1  3  5  7  9  11 13 15 2  5
             //****排序****//
             sort(v.begin(),v.end());
             for(int i=0;i<v.size();i++)
                      printf("%-3d", v[i]);printf("
    ");
             //1  2  3  5  5  7  9  11 13 15
             //****去重****//
             v.erase(unique(v.begin(),v.end()),v.end());
             for(int i=0;i<v.size();i++)
                      printf("%-3d", v[i]);printf("
    ");
             //1  2  3  5  7  9  11 13 15
             //****中间插入****//
             v.insert(v.begin()+1,3);//第1+1个位置插入元素3
             for(int i=0;i<v.size();i++)
                      printf("%-3d", v[i]);printf("
    ");
             //1  3  2  3  5  7  9  11 13 15
             //****删除区间元素****//
             v.erase(v.begin()+0,v.begin()+3);//删除[0,3)区间的元素
             for(int i=0;i<v.size();i++)
                      printf("%-3d", v[i]);printf("
    ");
             //3  5  7  9  11 13 15
             return 0;
    }

    3.priority_queue(特点:入队后元素自动从大到小排序)

    普通队列首元素q.front(),优先队列首元素q.top();
    q.empty();//判断q是否为空,空返回1,非空返回0 
    q.pop();//弹出队列中的第一个元素,无返回值 
    q.push(x);//推入x元素 
    q.size();//q中的元素个数 
    q.top();//返回队列第一个元素

    1)默认的优先队列(结构体,重载小于)

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    struct node{
             int x,y;
             bool operator < (const node &a)const{
                      return x<a.x;//定义x小则代表该结构体小
             }
    }tt[111];
    priority_queue<node>q;//定义为大的在队首
    int main()
    {
             tt[1].x=3,tt[1].y=3; tt[2].x=2,tt[2].y=1;
             tt[3].x=4,tt[3].y=4; tt[4].x=1,tt[4].y=2;
             for(int i=1;i<=4;i++)
                      printf("%d ",tt[i].x),q.push(tt[i]);
             printf("
    ");//3 2 4 1
             while(!q.empty()){//按队列元素的降序输出
                      node p=q.top();
                      q.pop();
                      printf("%-2d",p.x);
             }//4 3 2 1
             return 0;
    }
    

    2)less和greater优先队列

    #include<iostream>
    #include<queue>
    #include<algorithm>
    using namespace std;
    priority_queue<int,vector<int>,less<int> >l;//升序
    priority_queue<int,vector<int>,greater<int> >g;//降序
    int main()
    {
             for(int i=1;i<=5;i++)
                      l.push(i),g.push(i);
             while(!l.empty()){
                      int p=l.top();
                      l.pop();
                      printf("%d ",p);
             }printf("
    ");//1 2 3 4 5
             while(!g.empty()){
                      int p=g.top();
                      g.pop();
                      printf("%-2d",p);
             }printf("
    ");//5 4 3 2 1
             return 0;
    }
    
  • 相关阅读:
    typeScript 之(3) 类型
    TypeScript 采坑 记录
    typeScript 之(2) 环境部署
    typeScript 之(1) 简介
    webpack 之(29) optiization配置详解
    webpack 之(28) devServer配置详解
    webpack 之(27) resolve配置详解
    webpack 之(26) module配置详解
    docker中的Mysql数据卷与持久化
    TCP三次握手四次挥手
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/9893105.html
Copyright © 2011-2022 走看看