• C++ STL小总结


    一、vector

    /*
    1.size(),表示长度,vector里面的储存范围为 0~x.size()-1;
    2.empty(),表示vector里面是否有数据,有则返回0无则返回1
    3.clear()
    4.迭代器:vector<int>:iterator it;
    5.begin(),返回第一个元素的迭代器
    6.front(),返回第一个元素的值
    7.back(),返回最后一个元素的值 
    8.end(),返回最后一个元素迭代器的下一个迭代器,即*x.end()=x[x.size()];
    9.pop_back() && push_back();
    */ 
    #include<iostream>
    #include<cstdio>
    #include<vector>
    using namespace std;
    vector<int> x;
    int a;
    int main(){
    	while(~scanf("%d",&a)) x.push_back(a);
    	for(vector<int>::iterator it=x.begin();it!=x.end();it++) cout<<*it<<" ";
    	cout<<endl;
    	while(!x.empty()) printf("%d ",x.back()),x.pop_back();
    }
    

    二、priority_queue

    /*
    总结一下:
    1.Q.top()  返回首项的值
    2.Q.pop()  弹出堆首
    3.Q.empty()表示priority_queue里面是否有数据,有则返回0无则返回1
    */
    #include<iostream>
    #include<cstdio>
    #include<queue>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    struct zlk{//小根堆 
        int x;
        bool operator <(zlk y) const{return x>y.x;}
    }wx;
    struct zlkk{//大根堆 
        int x;
        bool operator <(zlkk y) const{return x<y.x;}
    }wxx;
    priority_queue<zlk> Q;
    priority_queue<zlkk> P;
    int main(){
        while(~scanf("%d",&wx.x))Q.push(wx),wxx.x=wx.x,P.push(wxx);
        while(!Q.empty()) printf("%d ",Q.top().x),Q.pop();cout<<endl;
        while(!P.empty()) printf("%d ",P.top().x),P.pop();
        return 0;
    }

    三、set&&multiset

    /*
    set和multiset的区别只有set不能判重,而multiset可以判重,其余支持的操作都一模一样
    1.size() 表示set里元素的个数
    2.empty() 表示set里面是否有数据,有则返回0无则返回1
    3.clear() 清空
    4.迭代器:形如set<int>::iterator it;
    5.begin(),返回第一个元素的迭代器
    6.end(),返回最后一个元素d的下一个元素的迭代器
    7.insert() 插入一个元素
    8.find(x) 返回set中一个数值等于x的迭代器,若不存在则返回end();
    9.lower_bound(x) 返回set中第一个大于等于x的迭代器 
    10.upper_bound(x) 返回set中第一个大于x的迭代器 
    11.erase()
      I.当erase(it),it为一个迭代器时,删除set中迭代器it指向的元素
      II.当erase(x),x为一个数值时,删除set中所有值为x的元素
    12.count(x) 返回set中值等于x的元素的个数 
    */
    #include<iostream>
    #include<cstdio>
    #include<set>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    set<int> Q;
    multiset<int> P,K;
    int a;
    int main(){
        while(~scanf("%d",&a)) Q.insert(a),P.insert(a),K.insert(a);
        printf("%d %d
    ",Q.size(),P.size());
        for(set<int>::iterator it=Q.begin();it!=Q.end();it++) printf("%d ",*it); puts("");
        for(multiset<int>::iterator it=P.begin();it!=P.end();it++) printf("%d ",*it);
        for(set<int>::iterator it=Q.begin();it!=Q.end();it++) printf("
    #Num=%d,%d,%d",*it,Q.count(*it),P.count(*it)); puts("");
        rep(i,1,10) printf("%d %d %d %d %d %d
    ",*Q.find(i),*Q.lower_bound(i),*Q.upper_bound(i),*P.find(i),*P.lower_bound(i),*P.upper_bound(i));
        set<int>::iterator it=Q.end(); it--; 
        while(!Q.empty()){
            printf("%d ",*it);
            Q.erase(it);
            if(!Q.empty()){it=Q.end();it--;}    
        }puts("");
        multiset<int>::iterator its=P.end(); its--; 
        while(!P.empty()){
            printf("%d ",*its);
            P.erase(its);
            if(!P.empty()){its=P.end();its--;}    
        }puts("");
        its=K.end(); its--; 
        while(!K.empty()){
            printf("%d ",*its);
            K.erase(*its);
            if(!K.empty()){its=K.end();its--;}    
        }
        return 0;
    }

     

    /*实现逆序的方法其实和优先队列是通法
    都是让函数里面认为放在后面的元素的放到前面,反之亦然,以实现逆序
    */ 
    #include<iostream>
    #include<cstdio>
    #include<set>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    struct zlk{
    	int a;
    	bool operator <(zlk x) const{return a>x.a;}
    }wx;
    set<zlk> Q;
    multiset<zlk> P;
    int main(){
    	while(~scanf("%d",&wx.a)) Q.insert(wx),P.insert(wx);
    	printf("%d %d
    ",Q.size(),P.size());
    	for(set<zlk>::iterator it=Q.begin();it!=Q.end();it++) printf("%d ",*it); puts("");
    	for(multiset<zlk>::iterator it=P.begin();it!=P.end();it++) printf("%d ",*it);
    	return 0;
    }
    

  • 相关阅读:
    [code]图像亮度调整enhancement
    另类安装系统——PE工具提取
    重置路由器密码
    苹果系统安装——虚拟机体验
    Cisco模拟器使用和静态路由配置
    Cisco基本命令配置
    server——小记
    关于server的一些小记
    计算机术语
    CCNA长语
  • 原文地址:https://www.cnblogs.com/handsome-zlk/p/10169813.html
Copyright © 2020-2023  润新知