deque

作者: Sheik | 来源:发表于2021-08-08 19:42 被阅读0次

    环境:ide:Mac+clion

    视频链接:
    https://www.bilibili.com/video/BV1Hb411Y7E5?p=5

    deque 双端数组,可以对头端进行插入和删除。可以称为队列。可以理解为它的实现都是由多个内存混充区组成,所以访问速度较慢。vector 访问元素非常快,deque 在插入前端数据比价快。 因为vector的实现,支持后端操作。所以要进行数据移动。

    //如果不想函数体内部修改deque的值,那么就需要加入const,如果参数加了const,那么迭代器也要加入const_iterator
    void printDeque(const deque<int> &d){
        for (deque<int>::const_iterator it=d.begin();it!= d.end();it++){
            cout << *it << " ";
        }
        cout << endl;
    }
    
    void test(){
        deque<int> deque1;//默认构造
        for (int i=0;i<10;i++){
            deque1.push_back(i);
        }
        printDeque(deque1);
        deque<int> deque2(deque1);//copy构造函数
        printDeque(deque2);
    
        deque<int> deque3(5,100);//申请5个位置用100进行初始化。
        printDeque(deque3);
    
        deque<int> deque4(deque1.begin(),deque1.end());//用deque1的数据进行初始化
        printDeque(deque4);
    };
    

    deque 赋值和vector 一样,重载了operator= 和assign 的两种方式。
    deque 大小操作,基本和vector 一致,只是没有容量概念。判断是否为空用empty ,大小size,调整大小用resize.

    deque 的插入和删除的操作:

    void test1(){
        deque<int> deque1;//默认构造
        for (int i=10;i<20;i++){
            deque1.push_back(i);//尾插法
        }
        for (int i=9;i>=0;i--){
            deque1.push_front(i);//头插法
        }
        printDeque(deque1);
    
        //删除:
        deque1.pop_back();
        printDeque(deque1);//尾删法
    
        deque1.pop_front();//头删法
        printDeque(deque1);
    
        deque1.insert(deque1.begin(),2,666);
        printDeque(deque1);
        deque<int> deque2;//默认构造
        deque2.push_back(888);
        deque2.push_back(889);
        deque1.insert(deque1.end(),deque2.begin(),deque2.end());//按照区间进行插入。
        printDeque(deque1);
    
        deque1.erase(deque1.begin());
        printDeque(deque1);
    
        deque1.clear();//清空数据。
        printDeque(deque1);
    
    };
    

    deque访问方式,也有[] 和iterator 以及at的方式。头尾元素依然是front 和back。
    deque sort 排序。

    void test2(){
        deque<int> deque1;//默认构造
        for (int i=10;i<20;i++){
            deque1.push_back(i);//尾插法
        }
        for (int i=0;i<10;i++){
            deque1.push_front(i);//头插法
        }
        printDeque(deque1);//9 8 7 6 5 4 3 2 1 0 10 11 12 13 14 15 16 17 18 19
        //排序默认算法是升序
        sort(deque1.begin(),deque1.end());//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
        printDeque(deque1);
    
        vector<int> v1;
        for (int i=10;i<20;i++){
            v1.push_back(i);//尾插法
        }
        v1.push_back(1);//尾插法
        for (vector<int>::const_iterator it=v1.begin();it!= v1.end();it++){
            cout << *it << " ";//110 11 12 13 14 15 16 17 18 19 1 
        }
        cout << endl;
        sort(v1.begin(),v1.end());
        for (vector<int>::const_iterator it=v1.begin();it!= v1.end();it++){
            cout << *it << " ";//1 10 11 12 13 14 15 16 17 18 19 
        }
        cout << endl;
    };
    
    

    相关文章

      网友评论

          本文标题:deque

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