你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

deque容器详细介绍

[复制链接]
gaosmile 发布时间:2020-10-7 21:25

一、deque工作原理:

deque容器内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据;中控器维护的每个缓冲区的地址,使得使用deque时像一片连续的内存空间,如下图所示:

微信图片_20201007211457.png

二、deque构造函数:

1、功能描述:

deque容器构造

2、函数原型:

  • dequedeqT;//默认构造函数

  • deque(beg,end);//构造函数将[beg,end)区间中的元素拷贝给本身

  • deque(n,elem);//构造函数将n个elem拷贝给本身

  • deque(const deque &deq);//拷贝构造函数


代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
    for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);

    deque<int>d2(d1.begin(),d1.end());
    print(d2);

    deque<int>d3(10,100);
    print(d3);

    deque<int>d4(d3);
    print(d4);

}
int main()
{
   test();
}

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100

三、deque赋值操作:

1、功能描述:

给deque容器进行赋值

2、函数原型:

  • deque operator=(const deque &deq);//重载等号操作符

  • assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身

  • assign(n,elem);//将n个elem拷贝赋值给本身


代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
    for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);

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

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

    deque<int>d4;
    d4.assign(10,100);
    print(d4);
}
int main()
{
   test();
}

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
100 100 100 100 100 100 100 100 100 100

四、deque大小操作:

1、功能描述:

对deque容器的大小进行操作

2、函数原型:

  • deque.empty();//判断容器是否为空

  • deque.size();//返回容器中的元素个数

  • deque.resize(num);//重新指定容器的长度num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除

  • deque.resize(num,elem);//重新指定容器的长度num,若容器变长,则以elem值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除


代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
    for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);

    if(d1.empty())
    {
      cout<<"d1 is empty"<<endl;
    }
    else
    {
      cout<<"d1 is not empty"<<endl;
      cout<<"d1 is : "<<d1.size()<<endl;
    }

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

    d1.resize(5);
    print(d1);
}
int main()
{
   test();
}


结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
0 1 2 3 4 5 6 7 8 9
d1 is not empty
d1 is : 10
0 1 2 3 4 5 6 7 8 9 1 1 1 1 1
0 1 2 3 4

注:deque没有容量的概念!

五、deque插入和删除:

1、功能描述:向deque容器中插入和删除数据

2、函数原型:

(1)两端插入操作:push_back(elem);//在容器尾部添加一个数据

  • push_front(elem);//在容器头部插入一个数据

  • pop_back();//删除容器最后一个元素数据

  • pop_front();//删除容器第一数据


(2)指定位置操作:

  • insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置

  • insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值

  • insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值

  • clear();//清空容器的所有数据

  • erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置

  • erase(pos);//删除pos位置的数据,返回下一个数据的位置


微信图片_20201007211503.png

两端代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
   /* for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);*/
    d1.push_back(10);
    d1.push_back(20);

    d1.push_front(100);
    d1.push_front(200);

    print(d1);

    d1.pop_back();
    print(d1);

    d1.pop_front();
    print(d1);

}
int main()
{
   test();
}

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
200 100 10 20
200 100 10
100 10

代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
   /* for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);*/
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    print(d1);
    d1.insert(d1.begin(),1000);
    print(d1);

    d1.insert(d1.begin(),2,10000);
    print(d1);
    deque<int>d2;
    d2.push_back(1);
    d2.push_back(2);
    d2.push_back(3);

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

int main()
{
   test();
}

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
200 100 10 20
1000 200 100 10 20
10000 10000 1000 200 100 10 20
1 2 3 10000 10000 1000 200 100 10 20

代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;
   /* for(int i =0; i<10;i++)
    {
        d1.push_back(i);
    }
    print(d1);*/
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    print(d1);

    deque<int>::iterator it = d1.begin();//d1.erase(d1.begin())
    it++;
    d1.erase(it);
    print(d1);

    d1.erase(d1.begin(),d1.end());
    print(d1);

    d1.clear();
    print(d1);
}

int main()
{
   test();
}

结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
200 100 10 20
200 10 20



六、deque数据存取:

1、功能描述:

对deque容器中的数据存取操作

2、函数原型:

  • at(int idx);//返回索引idx所指的数据

  • operator[];//返回索引idx所指的数据

  • front();//返回容器中第一个元素

  • back();//返回容器中最后数据元素


代码应用:

#include <iostream>
#include <deque>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;

    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
   
    for(int i =0; i<d1.size();i++)
    {
        cout<<d1<<" ";
    }
    cout<<endl;

    for(int i=0;i<d1.size();i++)
    {
       cout<<d1.at(i)<<" ";
    }
    cout<<endl;

    cout<<"the first is : "<<d1.front()<<endl;
    cout<<"the last is : "<<d1.back()<<endl;
}

int main()
{
   test();
}


结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
200 100 10 20
200 100 10 20
the first is : 200
the last is : 20

七、deque排序:

1、功能描述:

利用算法实现对deque容器进行排序

2、算法:

sort(iterator beg,iterator end);//对beg和end区间元素进行排序

代码应用:

#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void print(const deque<int>&d)
{
    for(deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
       cout<<*it<<" ";
    }
    cout<<endl;
}
void test()
{
    deque<int>d1;

    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);

    print(d1);
    sort(d1.begin(),d1.end());
    print(d1);
}

int main()
{
   test();
}


结果输出:

root@txp-virtual-machine:/home/txp/test2# ./a.out
200 100 10 20
10 20 100 200

收藏 评论0 发布时间:2020-10-7 21:25

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版