zoukankan      html  css  js  c++  java
  • C++之STL基本操作

    vector

    1. vector v
    2. reverse(v.begin(), v.end()), 反转容器的内容;
    3. v.push_back() v.pop_back(无参数) v.size();
    4. v.push_front(), 很慢其实;
    5. v.erase();
    6. v.insert(it, value);
    7. vec::iterator it=v.begin();it!=v.end();it++ 遍历;
    8. v.resize(0);

    set

    1. set s
    2. s.insert()
    3. s.find(type)
    4. s.count(type)
    5. s.remove(type)
    6. 红黑树实现,按照字典序的顺序从小到大排序

    unordered_set

    1. unordered_set s
    2. 用法同set, 只不过hash实现,占用空间,但是插入和查找都是o(1)的时间复杂度

    map

    1. map<type1, type2> m;
    2. m[type1]=type2 m.find(type1) m.count(type1) m.remove(type1);
    3. m.first() m.second();
    4. map中不存在相同元素,按照key自动进行排序;
    5. m.count(key)返回的是具有key的元素个数,如果有,则返回1,没有则返回0,注意这里每个key只能有一个或者0个;
    6. m.find(key)返回的是此值所在的位置,没有返回m.end();
    7. m.insert(make_pair(key, value));
    8. map<type1, type2>::Key_type指的是key的类型,返回的是type1;
    9. map<type1,type2>::value_type返回的是pair类型,pair->second返回的是type2类型

    unordered_map

    1. unordered_map<type1, type2> um;
    2. 用法和map类似,底层hash实现key,无序,后一个相同key的值会覆盖前一个key的value;

    stack

    1. stack s;
    2. s.push() s.pop() s.top();

    queue

    1. queue q;
    2. q.push() q.pop() q.front();
    3. q.back(),q.pop_front(),q.push_front();

    priority_queue

    1. priority_queue pq;
    2. 优先队列,本身为“越小的整数优先级越低的优先队列”
    3. 从小到大排列 队首取右边,即大的一方
    4. pq.push() pq.pop() pq.top()
    5. 从大到小排列 priority_queue<int, vector,greater > pq;
    6. 自定义优先队列
    //重载运算符
    struct stu
    {
        string name;
        int num;
        int age;
     
        bool operator<(const stu &p)const
        {
            return age>p.age;
        }
    }S[5];
     
    int main(int argc, char *argv[])
    {
        S[0]={"aa",1,10};
        S[1]={"bb",2,9};
        S[2]={"cc",3,8};
        S[3]={"dd",4,7};
        S[4]={"ee",5,6};
     
        priority_queue<stu>q;
     
        for(int i=0;i<5;i++)q.push(S[i]);
     
        while(!q.empty())
        {
            cout<<q.top().name<<" ";
            q.pop();
        }
     
        return 0;
    }
    
    //自定义仿函数
    struct stu
    {
        string name;
        int num;
        int age;
    }S[5];
     
    struct cmp
    {
        operator ()(const stu &q,const stu &p)
        {
            return q.num<p.num;
        }
    };
     
    int main(int argc, char *argv[])
    {
        S[0]={"aa",1,10};
        S[1]={"bb",2,9};
        S[2]={"cc",3,8};
        S[3]={"dd",4,7};
        S[4]={"ee",5,6};
     
        priority_queue<stu,vector<stu>,cmp >q;
     
        //priority_queue<stu>q;
     
        for(int i=0;i<5;i++)q.push(S[i]);
     
        while(!q.empty())
        {
            cout<<q.top().name<<" ";
            q.pop();
        }
     
        return 0;
    }
    

    string

    1. string a
    2. string b
    3. int pos=a.find(b, startPos);//为从a中的startPos位置上找是否和b有相同的串,有的话返回开始的下标pos,即子串寻找。
    4. a.erase(startPos, size) //即去除a中从startPos开始的长度为size的串
  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/wangzi199/p/13382500.html
Copyright © 2011-2022 走看看