STL容器之deque用法

目录

一、什么是deque

1、deque概念

2、deque与vector的区别

二、deque构造函数

三、deque常用接口

1、deque赋值操作

2、deque大小操作

3、deque插入和删除

4、deque数据存取和排序

一、什么是deque

1、deque概念

deque是双端数组,同时支持头部和尾部进行插入删除元素的操作,支持容器的遍历操作,支持迭代器的随机访问。

2、deque与vector的区别

1、vector虽说也可以利用insert()函数在头部插入数据,但效率会很低,因为插入时,需要把之后所有的元素往后挪位置,而且元素数量越大,效率会越低;

2、deque相对于vector而言,在头部插入就相当轻松,速度比vector快很多;

3、vector访问元素的速度比deque快,这与内部的实现有关系(deque内部有一个中控器)。

二、deque构造函数

1、默认无参构造函数;

2、参数为迭代器区间范围的构造函数,将区间范围内的元素拷贝给本身;

3、参数为N个相同元素的构造函数;

4、拷贝构造函数

void Constructor()
{
    qDebug() << "构造函数...";

    // 默认构造函数 deque<T> d
    deque<int> d;
    for( int i=0; i<5; i++ )
        d.push_back(i);
    Printfln(d);

    // 带迭代器区间范围的构造函数
    deque<int> d1(d.begin(), d.end());
    Printfln(d1);

    // 参数为N个相同元素的构造函数
    deque<int> d2(4, 666);
    Printfln(d2);

    // 拷贝构造函数
    deque<int> d3;
    d3 = d;
    Printfln(d3);

    qDebug() << "构造函数结束...";
}

三、deque常用接口

1、deque赋值操作

deque的赋值操作与vector是一样的三部曲:

(1)利用operator =()的操作赋值;

(2)利用assign函数重载实现赋值操作。

void OperatorTest()
{
    qDebug() << "赋值操作...";

    deque<int> d1;
    for( int i=0; i<10; i++ )
        d1.push_back(i);
    Printfln(d1);

    deque<int> d2;
    d2 = d1;
    Printfln(d2);

    deque<int> d3;
    d3.assign(d1.begin(), d1.end());
    Printfln(d3);

    deque<int> d4;
    d4.assign(10, 666);
    Printfln(d4);

    qDebug() << "赋值操作结束...";
}

2、deque大小操作

在deque中是没有像vector容量的概念,毕竟是通过中控器去操作,可以向前或者向后无限的扩大内存,和deque大小有关的接口:

(1)deque.empty():判断deque容器是否为空;

(2)deque.empty():获取容器中的元素个数;

(3)deque.resize(len)或者deque.reszie(len, element):

重新指定容器中的大小为len,如果重新指定后的长度比原来长,则默认0来填充,也可以利用element进行填充;如果重新指定后的长度比原来短,则舍弃后面的元素。

void SizeTest()
{
    qDebug() << "大小操作...";

    deque<int> d1;
    for( int i=0; i<10; i++ )
        d1.push_back(i);
    Printfln(d1);

    if( !d1.empty() )
    {
        qDebug() << "d1不为空!";

        qDebug() << "d1的大小: " << d1.size();
        d1.resize(15, 1);
        Printfln(d1);
    }
    else {
        qDebug() << "d1为空!";
    }

    qDebug() << "大小操作结束...";
}

3、deque插入和删除

void InsertDelete()
{
    deque<int> d;

    // 头部插入
    d.push_front(100);
    d.push_front(50);
    d.push_front(10);
    Printfln(d);
    // 头部删除
    d.pop_front();
    Printfln(d);

    // 尾部插入
    d.push_back(200);
    d.push_back(300);
    d.push_back(400);
    Printfln(d);
    // 尾部删除
    d.pop_back();
    Printfln(d);

    // erase()函数重载和clear()与vector相同
    // insert()函数重载插入与vector相同,这里就不测试了
}

4、deque数据存取和排序

(1)deque.at(index):获取索引为index的元素;

(2)operator[]():与原生数组一样,利用deque[index],返回索引为index的元素;

(3)front():返回容器中第一个元素;

(4)back():获取容器中最后一个元素。

(5)利用STL标准库算法sort(deque.begin(), deque.end())进行排序,需要包含头文件#include <algorithm>。

void DataSort()
{
    deque<int> d;
    d.push_back(200);
    d.push_back(100);
    d.push_front(10);
    d.push_front(50);
    Printfln(d);

    qDebug() << "容器中第一个元素: " << d.front();
    qDebug() << "容器中最后一个元素: " << d.back();

    sort(d.begin(), d.end());
    qDebug() << "排序后的d: ";
    Printfln(d);
}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值