deque,stack,quque容器

news2024/11/24 13:58:43

一、deque

1.基本概念

功能:
·双端数组,可以对头端进行插入删除操作
deque与vector区别:

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

deque相对而言,对头部的插入删除速度会比vector快
vector访问元素时的速度会比deque快,这和两者内部实现有关

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

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

2.构造函数


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

//打印
//容器里的数据不可修改
void printDeuque(const deque<int> &d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        
        cout << *it << "  ";
    }
    cout << endl;
}

//构造函数
void test001() {

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

    printDeuque(d1);
    //区间
    deque<int> d2(d1.begin(), d1.end());
    printDeuque(d2);
    deque<int> d3(10, 100);
    printDeuque(d3);
    deque<int> d4(d3);
    printDeuque(d4);
}

2.赋值操作

功能描述:
   给deque容器进行赋值
函数原型:
deque& operator=(const deque &deq);      //重载等号操作符
assign(beg, end);     ///将[beg.end]区间中的数据拷贝赋值给本身。
assign(n, elem);       //将n个elem拷贝赋值给本身。

 3.deque容器的大小进行操作

函数原型:
deque.empty();          //判断容器是否为空
deque.size();              //返回容器中元素的个数
deque.resize( num);   //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

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

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

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

5.数据的存取

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

6. deque排序

算法:
sort(iterator beg,iterator end);    l/对beg和end区间内元素进行排序

对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序

deque<int> d;
    d.push_back(10);
    d.push_back(20);
    d.push_front(96);
    d.push_front(18);
    //打印
    printDeuque(d);
    //默认排序规则是 从小到大
    sort(d.begin(), d.end());
    printDeuque(d);

 二、stack

1.基本概念

概念:  stack是一种先进后出(First ln Last Out,FILO)的数据结构,它只有一个出口

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

栈中进入数据称为---入栈push

栈中弹出数据称为---出栈pop

2.常用接口

构造函数:
stack<T> s;    //stack采用模板类实现,stack对象的默认构造形式
stack(const stack &stk);     //拷贝构造函数
赋值操作:
stack& operator=( const stack &stk);    //重载等号操作符
数据存取:
push(elem);    //向栈顶添加元素
pop();             //从栈顶移除第一个元素
top();              //返回栈顶元素
大小操作:
empty();         //判断堆栈是否为空
size();            //返回栈的大小

三、queue

1.基本概念

概念:Queue是一种先进先出(First ln First Out,FIFO)的教据结构,它有两个出口

队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列下允许有遍历行为

队列中进数据称为---入队push

队列中出数据称为---入队pop

2.常用接口

构造函数:
queue<T> que;                        //queue采用模板类实现,queue对象的默认构造形式
queue( const queue &que);     //拷贝构造函教
赋值操作:
queue& operator=(const queue &que);     //重载等号操作符
数据存取:
push(elem);                              //往队尾添加元素
pop();                                       //从队头移除第一个元素
back();                                      //返回最后一个元素
front();                                      //返回第一个元素
大小操作:
empty();                                     //判断队列是否为空
size();                                          //返回队列的大小

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NDK编译脚本

一、如何通过NDK进行编译。 1、新建jni文件夹&#xff0c;并将Android.mk、Applicatio n.mk、源文件都放入其中。 2、编写Android.mk文件。 LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE: test LOCAL_C_ALL_FILES : test.c LOCAL_SRC_FILES : $(LOCAL_C_…

centos7虚拟机在集群zookeeper上面配置hbase的具体操作步骤

系列文章目录 centos7配置静态网络常见问题归纳_centos7网络问题 centos7克隆虚拟机完成后的的一些配置介绍 虚拟机centos7配置Hadoop单节点伪分布配置教程 卸载centos7自带的jdk的操作步骤 centos7配置zookeeper本地模式与集群模式的详细教程 centos7虚拟机配置集群时间…

HTML引入Typescript编译JS文件 :Uncaught ReferenceError: exports is not defined

初学TypeScript&#xff0c;尝试在html引入ts编译出来的js文件: 报错&#xff1a;Uncaught ReferenceError: exports is not defined 以下是代码&#xff1a; 创建了TS:加入export {}形成独立的作用域&#xff0c;其他ts文件重复声明相同名称的变量。 export {} let str &…

Python和Java二选一该学啥?

首先我们需要了解Python和 Java分别是什么 根据IEEE Spectrum 2022年编程语言排名前十的分别是&#xff1a;Python&#xff0c;C&#xff0c;C&#xff0c;C#&#xff0c;Java&#xff0c;SQL&#xff0c;JavaScript&#xff0c;R&#xff0c;HTML&#xff0c;TypeScript。从该…

专访丨AWS量子网络中心科学家Antía Lamas谈量子计算

​ Anta Lamas Linares&#xff08;图片来源&#xff1a;网络&#xff09; 47岁的Anta Lamas Linares出生于西班牙西北部的圣地亚哥德孔波斯特拉。她在当地学习物理学&#xff0c;然后在牛津大学和加利福尼亚继续深造。后来&#xff0c;她在新加坡领导了亚马逊网络服务&#xf…

Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线程异常捕获

场景 Java中Thread类的常用API以及使用示例&#xff1a; Java中Thread类的常用API以及使用示例_霸道流氓气质的博客-CSDN博客 上面讲了Thread的常用API&#xff0c;下面记录下线程的一些常用操作。 注&#xff1a; 博客&#xff1a;霸道流氓气质的博客_CSDN博客-C#,架构之…

Doris(4):建表

可以通过在mysql-client中执行以下 help 命令获得更多帮助&#xff1a; help create table 1 基本概念 在 Doris 中&#xff0c;数据都以表&#xff08;Table&#xff09;的形式进行逻辑上的描述。 1.1 Row & Column 一张表包括行&#xff08;Row&#xff09;和列&#…

从零开始:如何集成美颜SDK到你的应用中

现在&#xff0c;随着人们对于美的追求不断提升&#xff0c;美颜应用已经成为了人们生活中不可或缺的一部分。在应用中&#xff0c;美颜功能的实现离不开美颜SDK的支持。那么&#xff0c;如何集成美颜SDK到你的应用中呢&#xff1f;下面&#xff0c;我们就来一步步了解。 第一…

Linux复习 / 线程相关----线程互斥 QA梳理

文章目录前言线程互斥Q&#xff1a;什么是临界资源&#xff1f;临界区呢&#xff1f;Q&#xff1a;什么是互斥&#xff1f;Q&#xff1a;数据不一致的本质是什么&#xff1f;Q&#xff1a;用锁对共享资源进行保护的前提是&#xff1a;锁也要作为共享资源被其他线程使用。那么用…

独家 | 招商银行:玩转校园招聘新方式 挖掘金融科技新人才

数字经济时代&#xff0c;金融科技人才队伍的引进与培养是招商银行人才体系建设的关键任务。 01.金融科技校招2大核心课题 招商银行数字化转型过程中&#xff0c;线上化、生态化、平台化、智能化、数据化全面加速发展&#xff0c;对人才队伍能力提出新要求。 2大核心课题&am…

Git的一些使用

虽然说这也不是啥重要的内容&#xff0c;但是作为计算机人也得学学&#xff0c;了解了解。 一些预备内容 首先得下载git&#xff0c;这个就不多说了。 安装完了之后&#xff0c;首先要做的就是设置用户名称和邮箱地址&#xff0c;因为每次Git提交都会使用该信息&#xff0c;…

I.MX6ULL_Linux_驱动篇(33) pinctrl与gpio子系统

上一章我们编写了基于设备树的 LED 驱动&#xff0c;但是驱动的本质还是没变&#xff0c;都是配置 LED 灯所使用的 GPIO 寄存器&#xff0c;驱动开发方式和裸机基本没啥区别。 Linux 是一个庞大而完善的系统&#xff0c;尤其是驱动框架&#xff0c;像 GPIO 这种最基本的驱动不可…

Linux实战学习

文章目录一、Linux权限信息权限控制信息chmodifconfigpingnmap netstatps killzip unzip常用快捷键二、搭建Java环境yumJDKTomcatMysql三、部署Web项目到服务器一、Linux权限信息 Linux中&#xff0c;拥有最大权限的账户为: root(超级管理员)&#xff0c;而普通用户在很多地方…

UWB成为智慧工厂时代的代表技术

UWB成为智慧工厂时代的代表技术 随着智慧工厂的到来&#xff0c;在人员安全问题较为重要的行业中&#xff0c;为了避免人员安全事故的出现&#xff0c;各家企业都逐步装备了UWB定位系统。UWB信号的辐射非常低&#xff0c;通常只有手机辐射的千分之一&#xff0c;因此在工业上应…

【 Spring MVC 核心功能(二) - 获取参数(上)】

文章目录一、获取单个参数二、获取多个参数三、获取对象四、后端参数重命名4.1 使用 RequestParam 重命名参数4.2 RequestParam 中参数必传4.3 设置非必传参数五、使用 PathVariable 获取URL中参数一、获取单个参数 在 Spring MVC 中可以直接⽤⽅法中的参数来实现传单个参&…

uni-app:登录与支付-- 三秒后自动跳转

三秒后自动跳转 三秒后自动跳转到登录页面 需求描述&#xff1a;在购物车页面&#xff0c;当用户点击 “结算” 按钮时&#xff0c;如果用户没有登录&#xff0c;则 3 秒后自动跳转到登录页面 在 my-settle 组件的 methods 节点中&#xff0c;声明一个叫做 showTips 的方法&am…

Vue:生命周期

1、定义 生命周期函数&#xff08;俗称&#xff1a;钩子函数&#xff09; 根据vue整个渲染机制&#xff0c;在渲染的每个关键点上&#xff0c;提供对应的函数&#xff0c;进行一些相关的业务操作。 2、四个阶段 初始阶段&#xff1a;beforeCreate()&#xff1a;可以加loadi…

vue-qr 生成二维码-使用

1、vue-qr官网说明 vue-qr - npm 2、使用 2.1 安装 vue-qr npm install vue-qr --save 2.2 代码 import vueQr from vue-qr; <el-dialog title"摘要" :visible.sync"openSummary" width"700px" append-to-body> <el-row> <el…

Oracle基础(表空间、用户、授权、表、数据类型、数据导入导出等)

Oracle基础(表空间、用户、授权、表、数据类型、数据导入导出等1 创建表空间1.1 概述1.2 语法&#xff1a;1.3 示例&#xff1a;2 创建用户2.1 语法2.2 示例2.3 用户授权类型3 表的创建、修改、删除3.1 表创建3.1.1 概述3.1.2 语法3.1.3 示例3.1.4 表的数据类型3.2 表修改3.2.1…

Oracle系列之七:表的创建与管理

Oracle表的创建与管理1. 表的创建2. 表的修改3. 表中数据的增删改查4. 表的Merge5. 表的删除6. 表的重命名7. 表的索引8. 表的约束9. dual表表是Oracle数据库中最基础的存储对象&#xff0c;用于存储数据。本文主要介绍了Oracle表的创建与管理&#xff0c;包括表的创建、修改、…