第一百二十四天学习记录:C++提高:STL-deque容器(上)(黑马教学视频)

news2024/10/5 17:22:49

deque容器

deque容器基本概念

功能:
双端数组,可以对头端进行插入删除操作
deque与vector区别
vector对于头部的插入删除效率低,数据量越大,效率越低
deque相对而言,对头部的插入删除速度比vector快
vector访问元素的速度会比deque快,这和两者内部实现有关
在这里插入图片描述
deque内部工作原理:
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
在这里插入图片描述
deque容器的迭代器也是支持随机访问的

笔记:学到这里因为数据结构才把链表学习完所以看到这里有一点懵。不过弹幕中的一句话让我有了点启发,说是deque就是链表+数组

deque构造函数

功能描述:
deque容器构造
函数原型:

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

//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);

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

	deque<int>d3(10, 33);
	printDeque(d3);

	deque<int>d4(d3);
	printDeque(d4);
}

int main()
{
	test01();
	return 0;
}

在这里插入图片描述
总结:deque容器和vector容器的构造方式几乎一致,灵活使用即可

deque赋值操作

功能描述:
给deque容器进行赋值

函数原型:

deque& operator=(const deque &deq); //重载等号操作符
assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身
assign(n,elem); //将n个elem拷贝赋值给本身
#include<iostream>
using namespace std;
#include<deque>

//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);

	//operator=赋值
	deque<int>d2;
	d2 = d1;
	printDeque(d2);

	//assign赋值
	deque<int>d3;
	d3.assign(d1.begin(), d1.end());
	printDeque(d3);

	deque<int>d4;
	d4.assign(10, 88);
	printDeque(d4);
}

int main()
{
	test01();
	return 0;
}

在这里插入图片描述
总结:deque赋值操作也与vector相同,需熟练掌握

deque大小操作

功能描述:
对deque容器的大小进行操作

函数原型:

deque.empty(); //判断容器是否为空
deque.size(); //返回容器中元素的个数
deque.resize(); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除
#include<iostream>
using namespace std;
#include<deque>

//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;
		//deque容器没有容量概念,这和它内部结构有关
	}

	//重新指定大小
	d1.resize(15);
	printDeque(d1);
	d1.resize(18,1);
	printDeque(d1);
	d1.resize(5);
	printDeque(d1);

}

int main()
{
	test01();
	return 0;
}

在这里插入图片描述
总结:
deque没有容量的概念
判断是否为空 —empty
返回元素个数 —size
重新指定个数 —resize

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

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

相关文章

十九、docker学习-Dockerfile

Dockerfile 官网地址 https://docs.docker.com/engine/reference/builder/Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一些命令的集合&#xff0c;只要理解它的逻辑和语法格式&#xff0c;就可以很容易的编写Docke…

C数据结构与算法——二叉树 应用一

实验任务 (1) 掌握二叉树的二叉链表存储结构定义&#xff1b; (2) 掌握该存储方式下的二叉树基本算法&#xff1b; (3) 掌握三种遍历的递归算法。 实验内容 实现二叉链表存储结构及其基本算法算法简单应用 创建一颗二叉树的二叉链表输出该二叉树的三种遍历序列&#xff08;前…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1&#xff09;redis事务&#xff0c;事务的三大命令语法&#xff1a;开启事务 multi语法&#xff1a;执行事务 exec语法&#xff1a;取消事务 discard 1.2&#xff09;redis事务的错误和回滚的情况1.3&#xff09;watch机制语法&…

NodeJS 个性化音乐推荐系统 毕业设-附源码00485

摘要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作规…

在excel调用SAP函数执行SAP数据查找或提交

1、下载插件 2、安装插件 3、执行函数 3.1 第一步 通过SAPRegister连接SAP服务器 var reg SAPRegister("10.10.14.15", "00", "mes", "AQ123456", "800") 需要改为实际的连接信息 "10.10.14.15" 为SAP服务器I…

【如何构建自己的基于Arduino的Scara 机器人】

【如何构建自己的基于Arduino的Scara 机器人】 1. 概述2. Scara机器人3D模型3. 3D打印机器人零件4. 组装机器人5. SCARA机器人电路图6. 完成装配7. SCARA机器人的工作原理8. 对 SCARA 机器人进行编程 – Arduino 和处理代码9. 总结在本教程中,我们将学习如何构建基于 Arduino …

Linux下C语言调用libcurl库下载文件到本地

一、项目介绍 当前文章介绍如何使用C语言调用libcurl库在Linux&#xff08;Ubuntu&#xff09;操作系统下实现网络文件下载功能。 libcurl是一个开源的跨平台网络传输库&#xff0c;用于在C和C等编程语言中实现各种网络通信协议的客户端功能。它支持多种协议&#xff0c;包括…

监测冷却塔面临的挑战和解决方案

工业冷却塔是现代生产过程中不可或缺的一部分&#xff0c;其稳定高效的运行对于许多工业流程至关重要。然而&#xff0c;冷却塔的监测任务并非易事&#xff0c;因为它们既有许多与其他旋转设备相似的特征&#xff0c;又面临一系列独特的挑战。在本文中&#xff0c;我们将探讨监…

在qemu中挂载镜像文件

将镜像文件作为交换分区 创建镜像文件&#xff1a; dd if/dev/zero ofswap.img bs512 count131072 qemu-system-arm -nographic -M vexpress-a9 -m 64M -kernel arch/arm/boot/zImage -append "rdinit/linuxrc consolettyAMA0 loglevel8" -dtb arch/arm/boot/dts/…

使用Automatic1111在本地PC上运行SDXL 1.0

这是我们部署Stable Diffusion的第三篇文章了&#xff0c;前两篇文章都详细介绍了Automatic1111的stable-diffusion-webui的安装&#xff0c;这次主要介绍如何使用SDXL 1.0模型。 获取项目 在本地获取Automatic1111’s WebUI项目&#xff0c;下载完成后应该是这个样子的 下载检…

【Redis】使用Docker镜像配置集群时的Operation timed out问题

不知道有没有小伙伴跟我一样是使用的Docker镜像进行Redis集群案例模拟的&#xff08;三台虚拟机确实带不动 &#xff09;&#xff0c;然后我遇到了一个问题&#xff1a;Could not connect to Redis at 172.17.0.2:6379: Operation timed out 172.17.0.2是我其中一个Redis实例的…

解决域控转移5个角色后关掉原主域控无法使用

最近域控win2016要升级到win2022&#xff0c;每次都是角色转移了&#xff0c;但是原先域控断网后&#xff0c;新角色域控无法单独运行&#xff0c;会提示找不到域服务器之类的 //转移5大角色 //需要在powershell执行 Move-ADDirectoryServerOperationMasterRole -Identity 你的…

Electron+vue3项目使用SQLite3数据库

SQLite 是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;我们不需要在系统中配置。 就像其他数据库&#xff0c;SQLite 引擎不是一个独立的进程&am…

C#,数值计算——多维下坡单纯形法(Downhill Simplex Method in Multidimensions)的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// 多维下坡单纯形法 /// Downhill Simplex Method in Multidimensions /// </summary> public class Amoeba { private int nfunc { get; set; } private …

代理模式及常见的3种代理类型对比

代理模式及常见的3种代理类型对比 代理模式代理模式分类静态代理JDK动态代理CGLIBFastclass机制 三种代理方式之间对比常见问题 代理模式 代理模式是一种设计模式&#xff0c;提供了对目标对象额外的访问方式&#xff0c;即通过代理对象访问目标对象&#xff0c;这样可以在不修…

kubernetes 集群命令行工具 kubectl

1、kubectl 概述 kubectl是一种命令行工具&#xff0c;用于管理Kubernetes集群和与其相关的资源。通过kubectl&#xff0c;您可以查看和管理Pod、Deployment、Service、Volume、ConfigMap等资源&#xff0c;也可以创建、删除和更新它们。 kubectl还提供了许多其他功能&#x…

那些你不知道的类和对象的知识

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

vscode运行python报错:ModuleNotFoundError:No module named ‘xxx‘

在乌班图上使用pycharm的时候&#xff0c;pycharm总是莫名其妙卡死&#xff0c;又说是搜狗输入法的锅&#xff0c;又说别的原因&#xff0c;一气之下不用pycharm,转到vscode上&#xff0c;没想到出现了如下报错。 就是vscode在运行python的时候&#xff0c;自定义模块的调用无…

springboot配置文件的使用

目录 1.application.properties是springboot默认的配置文件&#xff0c;但是比较繁琐&#xff0c;一般用.yml文件 2. 配置文件的作用 3.配置文件的使用 1.application.properties是springboot默认的配置文件&#xff0c;但是比较繁琐&#xff0c;一般用.yml文件 ①、properti…

【设计模式】模板模式

什么是模板模式&#xff1f; 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行…