C++之deque容器

deque

序列式容器

序列式容器都有着共同的特征

  • 序列式容器的元素按严格线性排列
  • 可以按顺序访问他们的元素
  • 只有一个前驱和后继
  • 每一个数据所在的位置的都是固定的
  • array vector list deque都属于序列式容器

vector是单端的 而deque是双端的

双端队列deque

  • deque双端队列也是一个动态数组, 内部的结构是有一定顺序性的, 的确的底层实现是一个链式数组
  • 相比vector没有的函数, deque由于底层是一个不连续的数组内存之间组成的, 所以没有指针内存的一些操作

头文件 #include<deque.>
定义: deque<数据类型>变量名

在这里插入图片描述

deque特点

  • deuqe是双端队列的数据结构, 可以在队首和队尾高效的添加和删除元素, 对于我们前面的vector, 它是比较具有优势的
  • duque内部是采用分段连续的内存来存储元素的, 在插入元素的时候随时都可以重新增加一段新的空间并且连接起来, 因此虽然提供了随机访问操作, 但是访问的速度相对vector还是要慢的
  • deque并没有data函数, 因为deque的元素并没有放在数组中, 所以不能兼容C语言
  • deque因为没有固定的内容空间, 所以不能提供capacity和reserve的操作
void push_front(); //从头部添加数据
void pop_front(); //从头部删除数据
void emplace_front(); //从头部添加数据
//push_front 和 emplace_front 功能一致,底层略有不同
相比vector没有的函数,deque由于底层是一个不连续的数组内存之间组成的,所以没有指针内存的一些
操作
deque容器没有下列的功能
void capcity()=delete;
//不能获取内存空间
void reserve()=delete;
//不能改变空间大小
void shrink_to_fit()=delete;
//不能缩减空间大小
//无法将数据给C语言函数使用
//没有固定的数组指针
void data();
#include<iostream>
#include<deque>
#include<algorithm>     //算法库
using namespace std;

template <typename T>
ostream& operator<<(ostream& os, const deque<T>dq)
{
    for (auto e : dq)
    {
        os << e<<" ";
    }
    cout << endl;
    return os;
}

//push_back(尾插)
void text1()
{
    deque<int>dq{ 1,2,3,4,5 };
    dq.push_back(6);
    cout << dq;
}

//push_front(头插)
void text2()
{
    deque<int>dq{ 1,2,3,4,5 };
    dq.push_front(0);
    cout << dq;
}

//pop_front(头删)
void text3()
{
    deque<int>dq{ 1,2,3,4,5 };
    dq.pop_front();
    cout << dq;
}

//pop_back(尾删)
void text4()
{
    deque<int>dq{ 1,2,3,4,5 };
    dq.pop_back();
    cout << dq;
}

//sort(排序,需要添加算法库#include<algorithm>)
void text5()
{
    deque<int>dq = { 32,2,4,3,5,6,8,7,6,4,5,1 };
    sort(dq.begin(), dq.end());
    cout << dq;
}

//find(查找元素并返回下标)
void text6()
{
    int a = 8;
    deque<int>dq = { 32,2,4,3,5,6,8,7,6,4,5,1 };
    auto e = find(dq.begin(), dq.end(), a);
    cout << "[" << e - dq.begin() << "]" << " " << *e << endl;
}

//反向迭代器(rbegin,rend)
void text7()
{
    deque<int>dq = { 32,2,4,3,5,6,8,7,6,4,5,1 };
    for (auto i = dq.rbegin();i != dq.rend(); i++)
    {
        cout << *i << " ";
    }
    cout << endl;
}

//常量迭代器
void text8()
{
    deque<int>dq = { 1,2,3,4,5,6,7,8,9,10 };
    for (auto i = dq.cbegin(); i != dq.cend(); i++)
    {
        cout << *i << " ";
    }
    cout << endl;
}

//反向常量迭代器
void text9()
{
    deque<int>dq = { 1,2,3,4,5,6,7,8,9,10 };
    for (auto i = dq.crbegin(); i != dq.crend(); i++)
    {
        cout << *i << " ";
    }
    cout << endl;
}
int main()
{
    text9();
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值