C++ deque 容器

deque 容器

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


/*
 deque (double ended queue 双端数组)示例
 动态数组,和 vector 类似,但是deque是双端的,可以在头部和尾部 插入、删除、都很快
 与vector不同,deque在内存中是分段连续的,每段内存都是连续的,所以在头部与尾部 插入、删除、都很快
 获取元素的复杂度是常数
 在头部与尾部 插入、删除、元素的复杂度是常数
 在中间插入、删除、元素的复杂的是线性的
 支持迭代器和算法
*/

// 使用函数模板
template <typename T>
void display(const std::deque<T> &arr){
    // 打印 array 数组内的元素
    for (const auto &i: arr)
        std::cout << i << " ";

    std::cout << std::endl;
}




void test1()
{
    // 初始化1
    std::deque<int> d1 {1, 2, 3, 4, 5};
    display(d1);

    // 初始化2
    std::deque <int> d2(10, 88);  // 结果为10个88:88 88 88 88 88 88 88 88 88 88
    display(d2);

    // 修改
    d2[0] = 99;
    d2.at(1) = 100;
    display(d2);
}

void test2()
{
    std::deque<int> d1 {1, 2, 3, 4, 5};
    // 尾部添加
    d1.push_back(100);

    // 头部添加
    d1.push_front(0);

    display(d1);

    std::cout << "第一个元素:" << d1.front() << std::endl;
    std::cout << "最后一个元素:" << d1.back() << std::endl;
    std::cout << "大小:" << d1.size() << std::endl;

    // 尾部弹出
    d1.pop_back();
    // 头部弹出
    d1.pop_front();
    display(d1);

}

void test3()
{
    std::vector<int> d1 {1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::deque<int> d2{0, 0};

    // 将vector中的 偶数放入deque后,奇数放在deque前
    for (auto &i:d1)
    {
        if (i % 2 ==0)
            d2.push_back(i);
        else
            d2.push_front(i);
    }
    display(d2);
}

void test4()
{
    std::vector<int> d1 {1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::deque<int> d2{};

    // 将vector中的元素放在d2后
    for (auto &i:d1){
        d2.push_back(i);
    }
    display(d2);

    // 清空
    d2.clear();
    // 将vector中的元素放在d2前
    for (auto &i:d1){
        d2.push_front(i);
    }
    display(d2);

}

void test5()
{
    std::vector<int> d1 {1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::deque<int> d2{};
    
    // 使用拷贝 实现test4的效果
    std::copy(d1.begin(), d1.end(), std::back_inserter(d2));
    display(d2);

    d2.clear();
    std::copy(d1.begin(), d1.end(), std::front_inserter(d2));
    display(d2);
}


int main()
{
    // test1();
    // test2();
    // test3();
    // test4();
    test5();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默执_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值