C++ deque类成员函数介绍

目录

🤔deque模板介绍:

🤔deque特点:

🤔deque内存结构图解:

🤔deque各操作地址指向:

🤔 deque的成员函数:

deque构造函数:

🔍代码实例:

📖运行结果:

 deque赋值函数:

🔍实例:

📖运行结果:

 deque判断函数

📖运行结果:

 deque的删除和插入:

🔍代码示例:

📖运行结果:

 📖deque数据存取函数:

🔍代码实例:

📖运行结果:

🤔 结束!


🤔deque模板介绍:

            📖  deque是C++ STL中的一个双端队列模板,它支持在队列的两端进行元素的插入和删除操作。deque的全称是double-ended queue,即双向队列。deque的特点是可以高效地在队列的两端进行元素的插入删除操作,而且可以在任意位置进行元素的访问和修改操作。

🤔deque特点:

📖1.支持迭代器:可以用迭代器随机访问容器中的元素。

📖2.插入和删除:可以在队头和队尾进行自由的删除和插入,但是在中间插入或删除的时候效率比较慢,这是由于deque的内存结构决定的,我们会在下文进行解释。

📖3.内存管理:deque使用一段连续的存储空间,但是它可以使用多个缓冲区存储元素,每一个缓冲区的大小可以不一样。

📖4.在C++17之前的标准中,deque是不支持元素的拷贝移动操作的,这是因为他的元素存储在不同的缓冲区中,而不是连续存储的,拷贝和移动可能会导致内存布局的变化,从而破坏deque的数据结构,C++17之后就移除了这一特性。

🤔deque内存结构图解:

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

🤔deque各操作地址指向:

 这也是为什么我们区间赋值永远不包含end()的原因:end()指向的是最后一个元素的后一个位置!

🤔 deque的成员函数:

deque构造函数:

📖1.默认构造函数:deque<T> deqT;

deque<int>d1;

📖2.将[beg,end)区间的元素拷贝给自身:deque (beg,end);

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

📖3.将n个ele拷贝给自身:deque(n,elem);

deque<int>d3(3, 8);

📖4.拷贝另一个容器给自身:deque(const deque &deq);

deque<int>d4(d3);

🔍代码实例:

#include<iostream>
using namespace std;
#include<deque>void print(deque<int>&d)
{for (deque<int>::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);}cout << "默认构造:" << endl;print(d1);//区间构造deque<int>d2(d1.begin(), d1.end());cout << "区间构造:" << endl;print(d2);//n个elem构造deque<int>d3(3, 8);cout << "n个ele构造:" << endl;print(d3);//拷贝构造deque<int>d4(d3);cout << "拷贝构造:" << endl;print(d4);}
int main()
{test01();}

📖运行结果:

 deque赋值函数:

📖1.将n个ele赋值给自身:assign(n,ele);

deque<int>d1;
d1.assign(8, 10);

📖2.将[beg,end)的元素拷贝赋值给自身:assign(beg,end)

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

📖3.重载等号运算符:deque &operator=const deque &deq

deque<int>d3 = d1;

🔍实例:

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{for (deque<int>::iterator it = d.begin(); it != d.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{//将n个elem元素赋值给自身deque<int>d1;d1.assign(8, 10);cout << "n个elem赋值结果为:";print(d1);//将beg,end中的数据赋值给自身deque<int>d2;d2.assign(d1.begin(), d1.end());cout << "区间赋值结果为:";print(d2);//重载等号运算符deque<int>d3 = d1;cout << "重载等号赋值结果为:";print(d3);
}
int main()
{test01();
}

📖运行结果:

 deque判断函数

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

📖2.判断容器中元素个数:size();

📖3重新指定容器长度为num,如果容器变长,则变长部分用默认值填充新位置,如果容器变小就删除多出元素:resize(num);

📖4.重新指定容器的长度为num。若容器变长,就以ele值填充新位置,若容器变短,则超出的元素被删除:resize(num,elem);

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{for (deque<int>::iterator it = d.begin(); it != d.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{//将n个elem元素赋值给自身deque<int>d1;d1.assign(8, 10);print(d1);cout << "d1容器是否为空(1为空 0为不空):" << d1.empty()<<endl;cout << "d1容器中元素的个数为:" << d1.size()<<endl;d1.resize(11);print(d1);d1.resize(4);print(d1);
}
int main()
{test01();
}

📖运行结果:

 deque的删除和插入:

两端插入
📖1.在尾部添加一个数据:push_back();
📖2.在容器头部添加一个数据:push_front();
📖3.删除容器中最后一个元素:pop_back();
📖4.删除容器中第一个数据:pop_front();

指定位置插入
📖1.  在pos位置插入一个ele元素,返回新数据的位置:  insert (pos,elem)
📖2. 在pos位置插入n个elem元素,无返回值:  insert(pos,n,elem)
📖3. 在pos位置插入[beg,end)区间的数据,无返回值:  insert(pos,beg,end)
📖4. 清空容器的所有数据:  clear() ;
📖5.  删除从beg到end的所有元素:  eares(beg,end);
📖6.删除pos位置的元素,返回下一个数据的位置:  eares pos

🔍代码示例:

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{for (deque<int>::iterator it = d.begin(); it != d.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{deque<int>d(2,7 );deque<int>d1;d1.assign(8, 10);print(d1);d1.push_back(1);d1.push_front(2);cout << "插入后";print(d1);d1.pop_back();d1.pop_front();cout << "删除后";print(d1);d1.insert(d1.begin(), 8);print(d1);d1.insert(d1.begin(), 2, 9);print(d1);d1.insert(d1.begin(), d.begin(), d.end());print(d1);d1.erase(d1.begin());print(d1);d1.erase(d1.begin(), d1.end());print(d1);d.clear();cout << "d的元素为:";}
int main()
{test01();
}

📖运行结果:

 📖deque数据存取函数:

📖1.获取容器中第dex+1个元素:at(int dex);
📖2.获取容器中第dex+1个元素:operator[dex];
📖3.获取容器中第一个元素:front();
📖4.获取容器中最后一个元素:back();

🔍代码实例:

#include<iostream>
using namespace std;
#include<deque>void print(deque<int>&d)
{for (deque<int>::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);}print(d1);cout << d1.at(4)<<endl;cout << d1[5]<<endl;cout << d1.front()<<endl;cout << d1.back()<<endl;}
int main()
{test01();}

📖运行结果:

🤔 结束!

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

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

相关文章

ajax异步请求刷新layui表格

ajax异步请求刷新Layui表格数据 今天遇到一个小问题&#xff0c;向后端传一个bean插入到数据库后&#xff0c;在前端页面同步显示。刚开始直接用from表单把数据传给后台进行插入操作&#xff0c;但是这样前端不能及时接收到后端完成插入操作的信息&#xff08;其实是我不知道怎…

form 表单提交时用ajax异步请求导致ajax请求结果无法接收问题

1、背景描述&#xff0c;有个公司内部用的小系统&#xff0c;不想大动干戈用太多前端框架&#xff0c;就用HTML5写了个登陆页面&#xff0c;刚开始想着用form表单提交登陆账户信息。后来因为前后端分离&#xff0c;并且统一用ajax调用后台服务交互数据&#xff0c;因此在form表…

AJAX异步请求(Asynchronous Javascript And Xml)

文章目录 1、传统请求及缺点&#xff08;1&#xff09;传统的请求&#xff08;2&#xff09;传统请求存在的问题 2、AJAX概述3、XMLHttpRequest对象4、AJAX GET请求5、AJAX GET请求缓存问题6、AJAX POST请求&#xff08;1&#xff09;案例一&#xff1a;使用AJAX POST请求实现用…

AJAX 异步请求处理

AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容。 AJA…

如何判断一个请求是否是Ajax异步请求

前言 今天在看项目过程中&#xff0c;发现了一段代码。是用来判断一个请求是否是ajax请求&#xff0c;出于好奇&#xff0c;我研究了一番。 代码预览 /*** 是否是Ajax异步请求* * param request*/public static boolean isAjaxRequest(HttpServletRequest request){String ac…

jquery实现ajax异步请求

前端代码&#xff1a; <html> <head> <meta charset"UTF-8"> <title>异步请求</title> <script type"text/javascript" src"jquery-3.3.1.js"></script> <script type"text/javascript"…

基于深度学习的高精度山羊检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度山羊检测识别系统可用于日常生活中或野外来检测与定位山羊目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的山羊目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

HTML发送异步请求,使用原生JS发送ajax异步请求

Ajax Ajax: Asynchronous javaScript and xml (异步的JavaScript和xml技术)。当我们向服务器发起请求的时候,服务器不会像浏览器响应整个页面,而是只有局部刷新。它是一个异步请求。 请求: 同步请求:只有当一次请求完全结束以后才能够发起另一次请求。 异步请求:不需要其他请…

AJAX 异步请求详细教程

文章目录 AJAX 异步请求简介Jquery 版 Ajax$.ajax() -- Jquery提供的 ajax 函数注册验证用户名是否可用$.get() 与 $.post()Ajax 返回数据类型 JSONjson 简介JSON 对象JSON 数组对象数组混合格式小结 JSON 应用JSON 对象的使用JSON 数组的使用响应的 json 数组数组对象混合格式…

ajax异步请求及案例

ajax异步请求及案例 1、ajax的介绍 前端页面想和后端页面进行数据交互就可以使用ajax。让 javascript 发送异步的 http 请求&#xff0c;与后台服务器通信进行数据的获取&#xff0c;实现局部刷新。在html页面使用ajax需要在web服务器环境下运行, 一般向自己的web服务器发送a…

AJAX 异步请求数据

AJAX 的全称是Asynchronous JavaScript and XML&#xff0c;其中&#xff0c;Asynchronous 是异步的意思&#xff0c;它有别于传统web开发中采用的同步的方式。 JQuery AJAX 应用详见&#xff1a;jQuery ajax AJAX 使用 JavaScript 在 web 浏览器与 web 服务器之间来发送和接…

异步请求-AJAX

什么是同步交互 首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后&#xff0c;按照预先编写好的程序中的业务逻辑进行处理&#xff0c;比如和数据库服务器进行数据信息交换。最后&#xff0c;服务器对请求进行响应&#xff0c;将结果返回给客户端&#xff0c;返…

Ajax

#Ajax 概念&#xff1a; Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。 1. 异步和同步&#xff1a;客户端和服务器端相互通信的基础上 * 客户端必须等待服务器端的响应。在等待的期…

elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

效果展示(多列可以配置) 一、icon下拉框的多列选择&#xff1a; 二、常规、通用下拉框的多列选择&#xff1a; 【注】第二种常规、通用下拉框的多列选择&#xff0c;是在第一种的前端代码上删除几行代码就行&#xff08;把icon显示标签删去&#xff09;&#xff0c;所以下面着重…

python+django高校人事管理系统vue

本高校人事管理系统以Django作为框架&#xff0c;Python语言&#xff0c;B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块&#xff1a;用户、院长、职称申报、工资信息、绩效信息、奖惩信息、招聘、科系分类等模块。 本文着重阐述了高校人事管理系统的分析、…

chatgpt赋能python:Python中提取纯数字的方法

Python中提取纯数字的方法 在数据清洗和数据分析中&#xff0c;经常需要将文本中的数字提取出来&#xff0c;用于后续的计算或统计分析。Python作为一种流行的数据处理语言&#xff0c;提供了多种方法来完成这个任务。 方法一&#xff1a;使用正则表达式 正则表达式是一种强…

spdk记录

spdk记录 hello_bdev命令行参数 往期文章&#xff1a; spdk环境搭建 hello_bdev 代码路径&#xff1a;examples/bdev/hello_world/hello_bdev.c 可执行文件路径&#xff1a;build/examples/hello_bdev 刚开始直接执行hello_bdev显示找不到Malloc0 ./build/examples/hello_b…

FinChat.io,金融领域的chatgpt

投资股票是一个充满挑战的过程,随着市场的起起伏伏,要抓住每一个机会,同时规避各种风险,这需要投资者具有敏锐的洞察力和快速的决策能力。不过现在有好消息,一款人工智能聊天机器人 FinChat.io 诞生了!它能帮助投资者分析市场,挖掘有潜力的股票,并提供买卖的实时建议 --------…

码农翻身——JDBC的诞生

随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库村&#xff0c; 这里呈现出一片兴旺发达的景象&#xff0c; 无数的程序在村里忙忙碌碌&#xff0c; 读写数据库&#xff0c; 实际上一个村落已经容不下这么多人了&#xff0c; 数据库村变成了数据镇。 这…

码农翻身(随笔)

书一直都有在读&#xff0c;我会一直更新博文&#xff0c;欢迎大家前来阅读、指教&#xff01; XML和注解 xml&#xff1a;应用于集中配置的场合&#xff0c;比如数据源的配置&#xff1b; 注解&#xff1a;像Controller、RequestMapping、Transactional这样的注解&#xff…