zoukankan      html  css  js  c++  java
  • STL deque

    deque 分块储存数据,双口分段式连续内存空间容器,无大小和容量概念

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    #include<deque>
    #include<vector>
    #include<ctime>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    void printDeque(const deque<int> &d){
        for (deque<int>::const_iterator it = d.begin(); it != d.end(); ++it){
            cout << *it << " ";
        }
    
        //deque<int>::reverse_iterator
    
        cout << endl;
    }
    
    //1. deque构造函数
    /*
    deque<T> deqT;//默认构造形式
    deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
    deque(n, elem);//构造函数将n个elem拷贝给本身。
    deque(const deque &deq);//拷贝构造函数。
    
    */
    void test01(){
    
        int arr[] = { 1, 2, 3, 4, 5, 6 };
        deque<int> d1(arr,arr+sizeof(arr)/sizeof(int));
        printDeque(d1);
    
        deque<int> d2(10, 6);
        printDeque(d2);
    
    }
    
    //2.deque赋值操作 
    /*
    assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
    assign(n, elem);//将n个elem拷贝赋值给本身。
    deque& operator=(const deque &deq); //重载等号操作符
    swap(deq);// 将deq与本身的元素互换
    
    */
    void test02(){
    
        int arr[] = { 1, 2, 3, 4, 5, 6 };
        deque<int> d1(arr, arr + sizeof(arr) / sizeof(int));
        printDeque(d1);
    
        deque<int> d2;
        d2.assign(d1.begin(),d1.end());
        d2.push_back(100);
        printDeque(d2);
    
        cout << "--------------" << endl;
        d1.swap(d2);
        printDeque(d1);
        printDeque(d2);
    }
    
    //3. deque大小操作
    /*
    deque.size();//返回容器中元素的个数
    deque.empty();//判断容器是否为空
    deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
    deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。
    */
    void test03(){
        
        deque<int> d;
        cout << d.size() << endl;
    
        if (d.empty()){
            cout << "空!" << endl;
        }
    
        d.resize(10, 7);
        printDeque(d);
    }
    
    //4. deque双端插入和删除操作
    /*
    push_back(elem);//在容器尾部添加一个数据
    push_front(elem);//在容器头部插入一个数据
    pop_back();//删除容器最后一个数据
    pop_front();//删除容器第一个数据
    */
    void test04(){
    
        deque<int> d;
        d.push_back(10);
        d.push_front(20);
        printDeque(d);
        d.pop_back();
        d.pop_front();
        cout << d.size() << endl;
    }
    
    //5. deque插入操作
    /*
    insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
    insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
    insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
    */
    void test05(){
    
        deque<int> d;
        d.push_back(10);
        d.push_back(20);
        d.push_back(30);
        d.push_back(40);
        d.push_back(50);
    
        d.insert(d.begin() + 1,100);
        d.insert(d.begin() + 2, 2, 0);
        printDeque(d);
    
        deque<int> d2;
        d2.push_back(100);
        d2.push_back(200);
        d2.push_back(300);
    
        d2.insert(d2.begin() + 1, d.begin() + 1, d.end());
        printDeque(d2);
    
    }
    
    //6. deque删除操作
    /*
    clear();//移除容器的所有数据
    erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
    erase(pos);//删除pos位置的数据,返回下一个数据的位置。
    */
    void test06(){
    
        deque<int> d;
        d.push_back(10);
        d.push_back(20);
        d.push_back(30);
        d.push_back(40);
        d.push_back(50);
    
        d.erase(d.begin());
        d.erase(d.begin(), d.end()); //d.clear();
    
        cout << d.size() << endl;
    
    }
    
    //学生打分案例
    //有5个学生,10个评委分别对这5个学生进行打分,去除最低分,去除最高分,取平均分
    
    class Student{
    public:
        string mName;
        int mScore;
    };
    
    //创建学生
    void CreateStudents(vector<Student> &vec){
        
        string seedName = "ABCDE";
        for (int i = 0; i < 5;i ++){
            
            //创建学生
            Student stu;
            stu.mName = "学生";
            stu.mName += seedName[i];
            stu.mScore = 0;
            //保存学生信息
            vec.push_back(stu);
        }
    
    }
    
    //对每一个学生进行打分
    void SetSocre(vector<Student> &vec){
    
        //种下种子
        srand((unsigned int)time(NULL));
    
        //遍历学生
        for (vector<Student>::iterator it = vec.begin(); it != vec.end(); ++it){
        
            //保存分数
            deque<int> dScore;
            for (int i = 0; i < 10;i ++){
                int score = rand() % 70 + 30;
                dScore.push_back(score);
            }
    
            //排序
            sort(dScore.begin(), dScore.end());
            //去除最高分,去除最低分
            dScore.pop_back();
            dScore.pop_front();
            //求总分
            int totalScore = 0;
            for (deque<int>::iterator sit = dScore.begin(); sit != dScore.end();++sit){
                totalScore += (*sit);
            }
            //求平均分
            int avgScore = totalScore / dScore.size();
            //保存当前学生分数
            it->mScore = avgScore;
        }
    
    }
    //给学生排序,并且输出
    bool mycomapre(Student &s1,Student &s2){
        return s1.mScore > s2.mScore;
    }
    void ShowStudengsByScore(vector<Student> &vec){
        sort(vec.begin(), vec.end(), mycomapre);
        //学生成绩从大到小显示
        for (vector<Student>::iterator it = vec.begin(); it != vec.end(); ++it){
            cout << "Name:" << it->mName << " Score:" << it->mScore << endl;
        }
    }
    
    void test07(){
    
        vector<Student> vStus; //保存学生信息
        //1.创建学生
        CreateStudents(vStus);
        //2.评委给学生打分
        SetSocre(vStus);
        //3.根据成绩降序排列学生
        ShowStudengsByScore(vStus);
    }
    
    int main(){
    
        //test01();
        //test02();
        //test03();
        //test04();
        //test05();
        //test06();
        test07();
    
        system("pause");
        return EXIT_SUCCESS;
    }
  • 相关阅读:
    关于html5 -- plus Webview模块管理应用窗口界面
    关于html的下载功能
    手机网页远程调试
    Javascript中的”==”和”===”
    遇见——那些觉得有点意思的好网站
    css3基础必回选择器全解
    WEB前端开发CSS基础样式全面总结
    求指导 值类型和引用类型
    实验四
    《构建之法》读后感
  • 原文地址:https://www.cnblogs.com/w-x-me/p/6792027.html
Copyright © 2011-2022 走看看