美文网首页c/c++
c++进阶——STL容器的基本介绍和基本使用

c++进阶——STL容器的基本介绍和基本使用

作者: Peakmain | 来源:发表于2019-03-03 19:13 被阅读3次

    vector的基本使用

    #include<vector>
    using namespace std;
    void main(){
        //vector
        vector<int> v;
        //插入
        //v.begin迭代器的开始的位置
        v.insert(v.begin(),12);
        v.insert(v.begin(), 22);
        v.insert(v.begin(), 2);
        //插到尾
        v.insert(v.end(), 92);
        //修改第一个位置的值
        v.front() = 102;
        //最后的数据修改
        v.back() = 93;
        //放到最后位置
        v.push_back(55);
        //移除最后一个元素
        v.pop_back();
         //通过迭代器进行移除
        v.erase(v.begin());
        //获取数据
        //若越界会崩溃
        for (int i = 0; i < v.size(); i++){
            cout << v[i] << "\t";
        }
        cout << endl;
        //若越界会抛异常
        for (int i = 0; i < v.size(); i++){
            cout << v.at(i)<<"\t";
        }
        cout << endl;
        //通过迭代器取值
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++){
            cout << *it << "\t";
        }
        cout << endl;
        getchar();
    }
    

    stack容器

    #include<stack>
    using namespace std;
    void main(){
        stack<int> s;
        //入栈
        s.push(12);
        s.push(16);
        s.push(72);
        //取出,for和迭代器都不可以
        int top =s.top();
        cout << top << endl;
        //弹出栈顶
        s.pop();
        int top = s.top();
        cout << top << endl;
        getchar();
    }
    

    队列

    #include<queue>
    using namespace std;
    void main(){
        queue<int> q;
    
        //存放数据
        q.push(12);
        q.push(22);
        q.push(32);
        q.push(52);
        //修改第一个位置的值
        q.front() = 2;
        //取数据
        cout << q.front() << endl;
        //弹出
        q.pop();
        //cout << q.front() << endl;
        //最后一位数
        cout << q.back() << endl;
        //循环
        while (!q.empty()){
            cout << q.front() << endl;
            q.pop();
        }
        getchar();
    }
    //优先级队列
    void main(){
        priority_queue<int> qq;
        qq.push(12);
        qq.push(22);
        qq.push(32);
        qq.push(52);
        //最大值
        cout << qq.top() << endl; 
        getchar();
    }
    

    list的增删改查

    void main(){
        list<int>list1;
        //插入
        list1.push_front(12);
        list1.push_back(22);
        list1.insert(list1.begin(), 16);
        
        //修改
        list1.back() = 32;
        list1.front() = 2;
        //删除
        list1.erase(list1.begin());
        list1.pop_back();
        list1.pop_front();
        //不能通过角标访问或者修改
        //取值
        for (list<int>::iterator i=list1.begin(); i !=list1.end(); i++)
        {
            cout << *i << endl;
        }
        getchar();
    }
    

    set集合的使用:set会对你传入的参数进行排序,不允许元素相同

    #include<functional>//因为用了greater<int>()
    void main(){
        //set<int,less<int>> s;//默认是这个,就是从小到大排序
        set<int, greater<int>> s;//从大到小
        //添加参数,不需要迭代器也不需要指定位置
        s.insert(12);
        s.insert(45);
        s.insert(13);
        //重复插入不会报错
        //第一个参数,插入的位置,第二个参数是否插入成功
        pair<set<int,greater<int>>::iterator,bool> res=  s.insert(45);
        bool isSucceed=res.second;
        if (isSucceed){
            cout << "插入成功" << endl;
        }
        else{
            cout << "插入失败" << endl;
        }
        for (set<int>::iterator i = s.begin(); i != s.end(); i++)
        {
            cout << *i << endl;
        }
        getchar();
    }
    

    谓词(函数谓词):按特定的规则所编写的函数谓词

    class Student{
    public:
        string name;
        int grade;
    public:
        Student(string name, int grade){
            this->name = name;
            this->grade = grade;
        }
    };
    //谓词(函数谓词):按特定的规则所编写的函数谓词
    bool compare(const Student& left, const Student& right){
        return left.grade > right.grade;
    }
    //函数对象
    struct comparefuction
    {
        bool operator()(const Student& _Left, const Student& _Right) const
        {   
            return (_Left.grade > _Right.grade);
        }
    };
    void main(){
        set<Student, comparefuction > s;//从大到小
        Student s1("Peakmain", 5);
        Student s2("Treasure", 51);
        Student s3("Body",7);
        s.insert(s1);
        s.insert(s2);
        s.insert(s3);
        //输出
        for (set<Student>::iterator it = s.begin(); it != s.end(); it++){
            cout << it->name.c_str() << endl;
            cout << it->grade  << endl;
        }
        getchar();
    }
    

    相关文章

      网友评论

        本文标题:c++进阶——STL容器的基本介绍和基本使用

        本文链接:https://www.haomeiwen.com/subject/pehpuqtx.html