duque

deque容器

deque容器的基本概念

功能:

  • 双端数组,可以对头端进行插入删除操作

deque容器与vector容器的区别

  • vector对于头部的插入删除效率低,数据量越大,效率越低

  • deque容器相对而言,对头部的插入删除速度比vector快

  • vector容器访问元素时的速度会比deque快,这和两者内部实现有关

    头文件

    #include<deque>

deque容器的操作(表格)

函数deque<int>a;deque<int>b;意义使用
front()第一个元素返回容器中第一个数据元素a.front();
begin()类头指针
back()最后一个元素返回容器中最后一个数据元素a.back();
end()类(尾指针后退一格)
a.push_back(elem);尾插法插数,尾部插入元素elev.push_back(存入数据);当数组//尾插法输出正
a.push_front(elem)在容器头部插入一个数据a.push_front(存入数据)//尾插法是反着的
a.pop_back()删除容器最后一个数据int n; n = num3(); for (int i = 0; i <n; i++) { a.pop_back(); }
a.pop_front()删除容器第一个数据for (int i = 0; i < n;i++) { a.pop_front(); }
a.insert(pos,elem)在pos位置插入一个elem元素的拷贝,返回新数据的位置for (int i = 0; i < num; i++) { int elem; cout << "输入要插入元素" << endl; cin >> elem; a.insert((a.begin()+i), elem); }
a.insert(pos,n,elem);在pos位置插入n个elem数据,无返回值a.insert(a.begin(),插入个数,插入量)
a.insert(pos,beg,end);在pos位置插入[beg,end]区间的数据,无返回值a.insert(b.begin(), a.begin(), a.end()); //a的头插入b的全部
a.clear();清空容器的所有数据a.clear();
a.erase(beg,end)删除[beg,end]区间的数据,返回下一个数据的位置int num3; num3 = nums(); a.erase(a.begin(), (a.begin() + num3));
a.erase()删除Pos位置的数据,返回下一个数据的位置for (num3; num3>0;num3--) { int elem; cout << "输入要插入元素" << endl; cin >> elem; a.erase(a.begin() + num3); }
a.assign(入容器名.begin(),入容器名.end())将传入容器赋值给调用容器b.assign(a.begin(),a.end());
a.assign(个数,内容)内容个 个数给调用vector<int>b;b.assign(10,100);
a.empty();判断容器是否为空if(a.empty()==0) { cout<<"a不为空"<<endl; } else if(a.empty()) { cout<<"容器为空"<<endl; }
a.size();返回容器中元素的个数cout<<"容器存放长度为"<<a.size()<<endl;
a.resize(num);重新指定容器的长度为num,若容器变长,则以默认值0填充新位置(也可自己选填充什么),若容器变短,则末尾超出容器长度的元素被删除a.resize(2);
a.resize(num,elem)重新指定容器的长度为num,若容器变长则以elem值填充新位置,若容器变短则末尾超出容器长度的元素被删除a.resize(16,2);
a.at(int idx);返回索引idx所指的数据int b = a.size(); for (int f = 0; f < b; f++) { cout << a.at(f) << endl; }
operator[];返回索引idx所指的数据int b = a.size(); for (int f = 0; f < b; f++) { cout << a[f] << endl; }
sort(iterator beg,iterator end)对beg和end区间内元素进行排序,默认从小到大(对于支持随机访问的迭代器的容器都可以利用sort算法直接对其进行排序)头文件#include<algorithm> sort(a.begin(),a.end());从小到大

deque内部工作原理

deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放其真实数据中控制器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间

  • deque容器的迭代器也是支持随机访问的

duque容器的构造函数

功能描述:

  • deque容器构造

  • 函数原型

  • deque<T>deqT;//默认构造形式

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

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

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

构造函数deque<类型>容器对象名;实现
deque<类型>a;a.push_back(赋入内容);deque<int>a; int b; cout<<"输入要存入数据的数量"<<endl; cin>>b; for(int i=0;i<b;i++) { int c; cout<<"输入要存入的数字"<<endl; cin>>c; a.push_back(c); }
deque<类型>b(a.begin(),a.end());把a中存的内容赋值给bdeque<int>b(a.begin(),a.end());
deque<类型>容器对象名(赋入内容个数,赋入内容);deque<int>c(10,100);
deque<类型>容器对象名(拷贝对象名);容器对象拷贝拷贝对象的内容deque<int>d(c);

#include<iostream>
#include<deque>
using namespace std;
//加const限定只读
void printdeque(const deque<int>&a)
{
    for(deque<int>::const_iterator it=a.begin();it!=a.end();it++)
    {
        cout<<*it<<endl;
    }
}
int main()
{
    deque<int>a;
    int b;
    cout<<"输入要存入数据的数量"<<endl;
    cin>>b;
    for(int i=0;i<b;i++)
    {
        int c;
        cout<<"输入要存入的数字"<<endl;
        cin>>c;
        a.push_back(c);
    }
    printdeque(a);
   
    deque<int>b(a.begin(),a.end());
    printdeque(b);
    
    deque<int>c(10,100);
     printdeque(c);
    
    deque<int>d(c);
    printdeque(d);
    
    system("pause");
    return 0;
}

deque容器赋值操作

功能描述:

  • 给deque容器进行赋值

  • 函数原型

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

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

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

#include<iostream>
#include<deque>
using namespace std;
​
void printdeque(deque<int>&a)
{
    for(deque<int>::iterator it=a.begin();it!=a.end();it++)
    {
        cout<<*it<<endl;
    }
}
​
int main()
{
    deque<int>a;
    int b;
    cout<<"输入要插入的数据量"<<endl;
    cin>>b;
   
    for(int i=0;i<b;i++)
    {
        a.push_back(b);
    }//= 的重载
    printdeque(a);
    
    deque<int>b;
    b=a;
    printdeque(b);
    
    deque<int>c;
    c.assign(a.begin(),a.end());
    printdeque(c);
    
    deque<int>d(10,100);
    printdeque(d);
    
    system("pause");
    return 0;
}   
 

deque容器大小操作

功能描述:

  • 函数原型

  • 对deque容器的大小进行操作

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

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

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

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

#include<iostream>
#include<deque>
using namespace std;
void printdeque(const deque<ing>&a)
{
    for(deque<int>::const_iterator it=a.begin();it!=a.end();it++)
    {
        cout<<*it<<endl;
    }
}
int main()
{
    deque<int>a;
    for(int i=0;i<10;i++)
    {
        a.push_back(i);
    }
    
    if(a.empty()==0)
    {
        cout<<"a不为空"<<endl;
    }
    else if(a.empty())
    {
        cout<<"容器为空"<<endl;
    }
    printdeque(a);
    cout<<"容器存放长度为"<<a.size()<<endl;
    
    a.resize(16,2);
    printdeque(a);
   
    a.resize(2);
    printdeque(a);
    system("pause");
    return 0;
}

deque容器插入和删除

功能描述:

  • 向deque容器中插入和删除数据

  • 函数原型

  • 两端插入操作

  • push_back(elem);//在容器尾部添加一个数据

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

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

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

  • 指定位置操作

  • 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位置的数据,返回下一个数据的位置

#include<iostream>
#include<deque>
using namespace std;
​
void addpoint(deque<int>& a);
void deletepoint2(deque<int>& a);
void deletepoint(deque<int>& a);
​
void printdeque(const deque<int>&a)
{
    for (deque<int>::const_iterator it = a.begin(); it != a.end(); it++)
    {
        cout << *it << "  ";
    }
    cout << endl;
}
​
void look(deque<int>&a)
{
 int b=a.size();
    for(int f=0;f<b;f++)
    {
        cout<<a.at(f)<<endl;
    }
}
void look2(deque<int>&a)
{
   int b=a.size();
   for(int f=0;f<b;f++)
   {
       cout<<a[f]<<endl;
   }
}
void lookhe(deque<int>&a)
{
    cout<<"模板的第一个元素为"<<a.front()<<endl;
    cout<<"模板的最后一个元素为"<<a.back()<<endl;
}
//部分用的为了省事
int nums()    //确定存入数量
{
    int i;
    cout << "输入要存入数据的量" << endl;
    cin >> i;
    return i;
}
int num()    //确定存入数据
{
    int g;
    cout << "输入要存入的数据" << endl;
    cin >> g;
    return g;
}
int num3() 
{
    int r;
    cout << "输入要删除的数量" << endl;
    cin >> r;
    return r;
}
//头插法
void headpush(deque<int>&a)
{
    int i = nums();
    for (int n = 0; n < i; n++)
    {
        int t;
        t = num();
        a.push_front(t);
    }
}
​
//尾插法
void endpush(deque<int>&a)
{
    int i = nums();
    for (int n = 0; n < i; n++)
    {
        int t;
        t = num();
        a.push_back(t);
    }
}
//头删
void headpop(deque<int>&a) 
{
    int n;
    n = num3();
    for (int i = 0; i < n;i++)
    {
        a.pop_front();
    }
}
//尾删
void endpop(deque<int>& a) 
{
    int n;
    n = num3();
    for (int i = 0; i <n; i++) 
    {
        a.pop_back();
    }
}
​
int main()
{
    //两端操作
    deque<int>a;
    deque<int>b;
    headpush(a);//头插法
    printdeque(a);
    headpop(a);
    printdeque(a);
​
​
​
    cout <<"-----------------------------------------------" << endl;
    endpush(b);//尾插法
    printdeque(b);
    endpop(b);
    printdeque(b);
​
    
    //对指定位置进行插入  insert是头插
    addpoint(a);
    printdeque(a);
    cout << endl;
    cout << endl;
    //对指定位置进行删除
    deletepoint(a);
    printdeque(a);
    deletepoint2(a);
    look(a);
    lookhe(a);
    a.insert(b.begin(), a.begin(), a.end());  //a的头插入b的全部
​
    a.clear();
    look2(a);
    system("pause");
​
    return 0;
}
​
//对指定位置进行插入  insert是头插
void addpoint(deque<int>&a)
{
    int num;
    num = nums();
    
    for (int i = 0; i < num; i++) 
    {
        int elem;
        cout << "输入要插入元素" << endl;
        cin >> elem;
        a.insert((a.begin()+i), elem);
    }
}
​
//对指定位置进行删除
void deletepoint(deque<int>&a) 
{
    int num3;
    num3 = nums();
​
    for (num3; num3>0;num3--)
    {
        int elem;
        cout << "输入要插入元素" << endl;
        cin >> elem;
        a.erase(a.begin() + num3);
    }
}
​
void deletepoint2(deque<int>&a) 
{
    int num3;
    num3 = nums();
    a.erase(a.begin(), (a.begin() + num3));
}
 

deque容器数据的存取

功能描述:

  • 对deque中的数据的存取操作

  • 函数原型:

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

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

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

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

#include<iostream>
#include<deque>
using namespace std;
​
void addpoint(deque<int>&a);
void deletepoint2(deque<int>&a);
void deletepoint(deque<int>&a);
​
void printdeque(const deque<int>&a)
{
    for (deque<int>::const_iterator it = a.begin(); it != a.end(); it++)
    {
        cout << *it << "  ";
    }
    cout << endl;
}
​
void look(deque<int>&a)
{
    int b = a.size();
    for (int f = 0; f < b; f++)
    {
        cout << a.at(f) << endl;
    }
}
void look2(deque<int>&a)
{
    int b = a.size();
    for (int f = 0; f < b; f++)
    {
        cout << a[f] << endl;
    }
}
void lookhe(deque<int>& a)
{
    cout << "模板的第一个元素为" << a.front() << endl;
    cout << "模板的最后一个元素为" << a.back() << endl;
}
//部分用的为了省事
int nums()    //确定存入数量
{
    int i;
    cout << "输入要存入数据的量" << endl;
    cin >> i;
    return i;
}
int num()    //确定存入数据
{
    int g;
    cout << "输入要存入的数据" << endl;
    cin >> g;
    return g;
}
int num3()
{
    int r;
    cout << "输入要删除的数量" << endl;
    cin >> r;
    return r;
}
//头插法
void headpush(deque<int>&a)
{
    int i = nums();
    for (int n = 0; n < i; n++)
    {
        int t;
        t = num();
        a.push_front(t);
    }
}
​
//尾插法
void endpush(deque<int>&a)
{
    int i = nums();
    for (int n = 0; n < i; n++)
    {
        int t;
        t = num();
        a.push_back(t);
    }
}
//头删
void headpop(deque<int>&a)
{
    int n;
    n = num3();
    for (int i = 0; i < n;i++)
    {
        a.pop_front();
    }
}
//尾删
void endpop(deque<int>& a)
{
    int n;
    n = num3();
    for (int i = 0; i <n; i++)
    {
        a.pop_back();
    }
}
​
int main()
{
    //两端操作
    deque<int>a;
    deque<int>b;
    headpush(a);//头插法
    printdeque(a);
    headpop(a);
    printdeque(a);
​
​
​
    cout <<"-----------------------------------------------" << endl;
    endpush(b);//尾插法
    printdeque(b);
    endpop(b);
    look2(b);
​
​
    //对指定位置进行插入  insert是头插
    addpoint(a);
    printdeque(a);
    cout << endl;
    cout << endl;
    //对指定位置进行删除
    deletepoint(a);
    printdeque(a);
    deletepoint2(a);
    look(a);
​
​
​
    lookhe(a);
​
​
​
    a.insert(b.begin(), a.begin(), a.end());  //a的头插入b的全部
​
    a.clear();
    printdeque(a);
    system("pause");
​
    return 0;
}
​
//对指定位置进行插入  insert是头插
void addpoint(deque<int>&a)
{
    int num;
    num = nums();
​
    for (int i = 0; i < num; i++)
    {
        int elem;
        cout << "输入要插入元素" << endl;
        cin >> elem;
        a.insert((a.begin()+i), elem);
    }
}
​
//对指定位置进行删除
void deletepoint(deque<int>&a)
{
    int num3;
    num3 = nums();
​
    for (num3; num3>0;num3--)
    {
        int elem;
        cout << "输入要插入元素" << endl;
        cin >> elem;
        a.erase(a.begin() + num3);
    }
}
​
void deletepoint2(deque<int>&a)
{
    int num3;
    num3 = nums();
    a.erase(a.begin(), (a.begin() + num3));
}
​

deque排序

功能描述:

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

  • 算法:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只符华单推人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值