c++ deque

deque构造函数

/*
 * deque构造函数
 */

/*
 * 功能:
 * 双端数组,可以对头端进行插入删除操作
 *
 * deque与vector区别:
 * vector对于头部的插入删除效率低,数据量越大,效率越低
 * deque相对而言,对头部的插入删除速度比vector快
 * vector访问元素时的速度会比deque快,这个两者内部实现有关
 *
 * deque内部工作原理:
 * deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
 * 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
 */

#include <iostream>
#include <deque>

void printDeuqe(const std::deque<int> &d)
{
    for(auto it = d.begin(); it != d.end(); it++)
    {
        std::cout<<*it<<"  ";
    }
    std::cout<<std::endl;
}

void test01() {
    std::deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    printDeuqe(d1);

   std::deque<int> d2(d1.begin(), d1.end());
   printDeuqe(d2);

   std::deque<int> d3(10, 100);
   printDeuqe(d3);

   std::deque<int> d4(d3);
   printDeuqe(d4);
}

int main()
{
    test01();

    return 0;
}

赋值操作

/*
 * 赋值操作
 */

#include <iostream>
#include <deque>

void printDeuqe(const std::deque<int> &d)
{
    for(auto it = d.begin(); it != d.end(); it++)
    {
        std::cout<<*it<<"  ";
    }
    std::cout<<std::endl;
}

void test01()
{
    std::deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    printDeuqe(d1);

    //operator =赋值
    std::deque<int> d2;
    d2 = d1;
    printDeuqe(d2);

    //assign 赋值
    std::deque<int> d3;
    d3.assign(d1.begin(), d1.end());
    printDeuqe(d3);

    std::deque<int> d4;
    d4.assign(10, 100);
    printDeuqe(d4);
}

int main()
{
    test01();

    return 0;
}

大小操作

/*
 * 大小操作
 */


#include <iostream>
#include <deque>

void printDeuqe(const std::deque<int> &d)
{
    for(auto it = d.begin(); it != d.end(); it++)
    {
        std::cout<<*it<<"  ";
    }
    std::cout<<std::endl;
}

void test01()
{
    std::deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    printDeuqe(d1);

    if(d1.empty())
    {
        std::cout<<"d1 is empty"<<std::endl;
    }
    else
    {
        std::cout<<"d1 is not empty"<<std::endl;
        std::cout<<"d1.size: "<<d1.size()<<std::endl;
        //deque没有容量概念
    }

    d1.resize(15);
    printDeuqe(d1);

    d1.resize(15, 1);
    printDeuqe(d1);

    d1.resize(5);
    printDeuqe(d1);


}

int main()
{
    test01();

    return 0;
}

插入和删除

/*
 * 插入和删除
 */

#include <iostream>
#include <deque>

void printDeuqe(const std::deque<int> &d)
{
    for(auto it = d.begin(); it != d.end(); it++)
    {
        std::cout<<*it<<"  ";
    }
    std::cout<<std::endl;
}


//两端操作
void test01()
{
    std::deque<int> d1;

    //尾插
    d1.push_back(10);
    d1.push_back(20);

    //头插
    d1.push_front(100);
    d1.push_front(200);

    printDeuqe(d1);

    //尾删
    d1.pop_back();
    printDeuqe(d1);

    //头删
    d1.pop_front();
    printDeuqe(d1);
}

void test02()
{
    std::deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);

    printDeuqe(d1);

    //insert插入
    d1.insert(d1.begin(), 1000);
    printDeuqe(d1);

    d1.insert(d1.begin(), 2, 10000);
    printDeuqe(d1);

    //按照区间进行插入
    std::deque<int> d2;
    d2.push_back(1);
    d2.push_back(2);
    d2.push_back(3);

    d1.insert(d1.begin(), d2.begin(), d2.end());
    printDeuqe(d1);
}

//删除
void test03()
{
    std::deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);

    auto it = d1.begin();
    it++;
    d1.erase(it);
    printDeuqe(d1);
    
    //清空
    d1.clear();
    printDeuqe(d1);
}

int main()
{
//    test01();
//    test02();
    test03();

    return 0;
}

数据存取

/*
 * 数据存取
 */

#include <iostream>
#include <deque>

void test01()
{
    std::deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_back(30);
    d1.push_front(100);
    d1.push_front(200);
    d1.push_front(300);

    //通过[]方式访问元素
    for(int i = 0; i < d1.size(); i++)
    {
        std::cout<<d1[i]<<" ";
    }
    std::cout<<std::endl;

    //通过at方式访问元素
    for(int i = 0; i < d1.size(); i++)
    {
        std::cout<<d1.at(i)<<" ";
    }
    std::cout<<std::endl;

    std::cout<<"front: "<<d1.front()<<std::endl;
    std::cout<<"back: "<<d1.back()<<std::endl;
}

int main()
{
    test01();

    return 0;
}

排序操作

/*
 * 排序操作
 */

/*
 * sort
 */

#include <iostream>
#include <deque>
#include <algorithm>

void printDeuqe(const std::deque<int> &d)
{
    for(auto it = d.begin(); it != d.end(); it++)
    {
        std::cout<<*it<<"  ";
    }
    std::cout<<std::endl;
}

void test01()
{
    std::deque<int> d;
    d.push_back(10);
    d.push_back(20);
    d.push_back(30);
    d.push_front(100);
    d.push_front(200);
    d.push_front(300);

    printDeuqe(d);

    //排序 默认排序规则是从小到大
    //对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
    std::cout<<"after sort: "<<std::endl;
    std::sort(d.begin(), d.end());
    printDeuqe(d);

    
}

int main()
{
    test01();

    return 0;
}
发布了39 篇原创文章 · 获赞 8 · 访问量 7939

猜你喜欢

转载自blog.csdn.net/weixin_40512640/article/details/103612251
今日推荐