deque

2021-08-08  本文已影响0人  Sheik

环境: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;
};

上一篇下一篇

猜你喜欢

热点阅读