首页 > 其他分享 >deque容器

deque容器

时间:2024-03-15 17:35:20浏览次数:20  
标签:deque end printDeque 容器 back push

deque

1. deque 容器基本概念

功能:

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

头文件:<deque>

deque与vector区别:

  • vector对于头部的插入删除效率低,数据量越大,效率越低
  • deque相对而言,对头部的插入删除速度回比vector快
  • vector访问元素时的速度会比deque快,这和两者内部实现有关

deque内部工作原理:

  • deque 内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
  • 中控器维护的是每个缓冲区的地址,使得使用 deque 时像一片连续的内存空间
  • deque 容器的迭代器也是支持随机访问

2. deque 构造函数

函数原型:

  • deque<T> deqT; //默认构造形式
  • deque(beg, end); //构造函数将[beg, end)区间中的元素拷贝给本身。
  • deque(n, elem); //构造函数将n个elem拷贝给本身。
  • deque(const deque &deq); //拷贝构造函数

示例:

deque<int> d1; //无参构造函数  
d1.push_back(1);  

deque<int> d2(d1.begin(),d1.end()); 
deque<int>d3(10,100); 
deque<int>d4 = d3;    

3. deque 赋值操作

功能描述:

  • 给deque容器进行赋值

函数原型:

  • deque& operator=(const deque &deq); //重载等号操作符
  • assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。
  • assign(n, elem); //将n个elem拷贝赋值给本身。

示例:

deque<int> d1; //无参构造函数  
d1.push_back(1); 

deque<int>d2;  
d2 = d1;  

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

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

4. deque 大小操作

函数原型:

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

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

  • deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

    //如果容器变短,则末尾超出容器长度的元素被删除。

  • deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。

    //如果容器变短,则末尾超出容器长度的元素被删除。

示例:

#include <deque>  
​  
void printDeque(const deque<int>& d)   
{  
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {  
        cout << *it << " ";  
​  
    }  
    cout << endl;  
}  
​  
//大小操作  
void test01()  
{  
    deque<int> d1;  
    for (int i = 0; i < 10; i++)  
    {  
        d1.push_back(i);  
    }  
    printDeque(d1);  
​  
    //判断容器是否为空  
    if (d1.empty()) {  
        cout << "d1为空!" << endl;  
    }  
    else {  
        cout << "d1不为空!" << endl;  
        //统计大小  
        cout << "d1的大小为:" << d1.size() << endl;  
    }  
​  
    //重新指定大小  
    d1.resize(15, 1);  
    printDeque(d1);  
​  
    d1.resize(5);  
    printDeque(d1);  
}  
​  
int main() {  
    test01();  
    system("pause");  
    return 0;  
}

总结:

  • deque没有容量的概念

5. 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 <deque>  
​  
void printDeque(const deque<int>& d)   
{  
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {  
        cout << *it << " ";  
​  
    }  
    cout << endl;  
}  
//两端操作  
void test01()  
{  
    deque<int> d;  
    //尾插  
    d.push_back(10);  
    d.push_back(20);  
    //头插  
    d.push_front(100);  
    d.push_front(200);  
​  
    printDeque(d);  
​  
    //尾删  
    d.pop_back();  
    //头删  
    d.pop_front();  
    printDeque(d);  
}  
​  
//插入  
void test02()  
{  
    deque<int> d;  
    d.push_back(10);  
    d.push_back(20);  
    d.push_front(100);  
    d.push_front(200);  
    printDeque(d);  
​  
    d.insert(d.begin(), 1000);  
    printDeque(d);  
​  
    d.insert(d.begin(), 2,10000);  
    printDeque(d);  
​  
    deque<int>d2;  
    d2.push_back(1);  
    d2.push_back(2);  
    d2.push_back(3);  
​  
    d.insert(d.begin(), d2.begin(), d2.end());  
    printDeque(d);  
}  
​  
//删除  
void test03()  
{  
    deque<int> d;  
    d.push_back(10);  
    d.push_back(20);  
    d.push_front(100);  
    d.push_front(200);  
    printDeque(d);  
​  
    d.erase(d.begin());  
    printDeque(d);  
​  
    d.erase(d.begin(), d.end());  
    d.clear();  
    printDeque(d);  
}  
​  
int main() {  
    //test01();  
    //test02();  
    test03();  
    system("pause");  
    return 0;  
}  

总结:

  • 插入和删除提供的位置是迭代器!

6. deque 数据存取

函数原型:

  • at(int idx); //返回索引idx所指的数据
  • operator[]; //返回索引idx所指的数据
  • front(); //返回容器中第一个数据元素
  • back(); //返回容器中最后一个数据元素

7. deque 排序

算法:

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

示例:

#include <deque>  
#include <algorithm>  
​  
void printDeque(const deque<int>& d)   
{  
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {  
        cout << *it << " ";  
    }  
    cout << endl;  
}  
​  
void test01()  
{  
    deque<int> d;  
    d.push_back(10);  
    d.push_back(20);  
    d.push_front(100);  
    d.push_front(200);  
​  
    printDeque(d);  
    sort(d.begin(), d.end());  
    printDeque(d);  
}  
​  
int main() {   
    test01();    
    system("pause");    
    return 0;  
}

标签:deque,end,printDeque,容器,back,push
From: https://www.cnblogs.com/xingzhuz/p/18075885

相关文章

  • list容器
    list1.list基本概念功能:将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一个双向......
  • iOS端创建ReactNative容器第一步:打出jsbundle和资源包
    react-native的打包流程是通过执行react-nativebundle指令进行的。 添加构建指令修改RN项目中的package.json文件,先其中添加构建命令build-release-ios和build-debug-ios"scripts":{"android":"react-nativerun-android","ios":"react-nativerun-ios"......
  • 【C++进阶】C++关联式容器map和set用法详解
    map和set用法详解一,关联式容器二,键值对pair三,set1.set的用法2.multiset的用法四,map1.键值对pair的介绍2.map用法3.multimap用法五,总结上一节我们讲解了二叉搜索树,在讲解之前我们先来讲一下set和map,因为set和map的底层是AVL树和红黑树,而AVL树和红黑树又是一种二......
  • set容器详解
    set 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。set 内部通常采用 红黑树 实现。平衡二叉树 的特性使得 set 非常适合处理需要同时兼顾查找、插入与删除的情况。和数学中的集合相似,set 中不会出现值相同的元素。如果需要有相同元素的集合,......
  • 性能逆天的三端电容器-谈历代iphone电容器的变迁史
    早期苹果手机的硬件设计在业界享有很高的声誉,技术领先,主要体现在以下方面:整合性设计:苹果采用垂直整合的设计理念,掌控硬件和软件的整个生态系统。这种一体化设计使得硬件和软件之间更好地协同工作,提供更流畅、高效的用户体验。高质量的材料和制造工艺:苹果注重采用高质量的材......
  • 数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)
    本期作者前言云原生时代下,Kubernetes已成为容器技术的事实标准, 使得基础设施领域应用下自动化运维管理与编排成为可能。对于无状态服务而言, 业界早已落地数套成熟且较完美的解决方案。可对于有状态的服务, 方案的复杂度就以几何倍数增长, 例如分布式应用多个实例间的依......
  • linux系统对于docker容器的监控
    容器监控容器监控原生命令操作问题容器监控三剑客CAdvisorInfluxDBGranfanacompose编排监控工具新建目录创建CIG.yml文件启动docker-compose测试容器监控CAdvisor+InfluxDB+Granfana原生命令操作dockerstats问题通过dockerstats命令可以很方便的看到当......
  • linux系统创建私有容器仓库和docker容器的资源限制
    私有仓库创建和资源限制创建私有仓库docker资源限制系统压力测试工具stresscpu资源限制限制CPUShare限制CPU核数CPU绑定mem资源限制限制IO创建私有仓库上传harbor压缩包解压下载docker-compose进入解压后的目录修改配置文件mvharbor.yml.tmplharbor.ymlv......
  • DDCMS 后端容器化解决方案:实现优雅的环境隔离,提升开发者体验
    DDCMS后端容器化解决方案:实现优雅的环境隔离,提升开发者体验浅聊一下,最近在参与DDCMS的组件开发和测试,碰到的一些问题,这个项目涉及了DDCMS-Contract和DDCMS-Service以及DDCMS-Front。合约、后端、前端。合约整理完了整体的业务和设计,当前在弄后端的时候,每一次部署稍微麻烦......
  • 容器集群实现多机多卡分布式微调大模型chatglm2-6b(deepseed + LLaMA + NCCL)
    环境信息2台物理机(187.135,187.136),各两张p4显卡,安装好docker=20.10.0,安装好nvidia驱动(driverversion=470.223.02,cudaversion=11.4)构造容器集群(dockerswarm187.136节点作为manager节点,187.135节点作为worker节点)[root@host-136~]#dockerswarminit--advertise-addr......