当前位置: 首页 > news >正文

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

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>
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;//尾插d1.push_back(10);d1.push_back(20);//头插d1.push_front(30);d1.push_front(40);printDeque(d1);//尾删d1.pop_back();printDeque(d1);//头删d1.pop_front();printDeque(d1);
}void test02()
{deque<int>d1;d1.push_back(10);d1.push_back(20);d1.push_front(30);d1.push_front(40);printDeque(d1);//insert插入d1.insert(d1.begin(), 80);printDeque(d1);d1.insert(d1.begin(),2, 90);printDeque(d1);//按照区间进行插入deque<int>d2;d2.push_back(1);d2.push_back(2);d2.push_front(3);d1.insert(d1.begin(), d2.begin(), d2.end());printDeque(d1);
}void test03()
{deque<int>d1;d1.push_back(10);d1.push_back(20);d1.push_front(30);d1.push_front(40);printDeque(d1);//删除deque<int>::iterator it = d1.begin();it++;d1.erase(it);printDeque(d1);//按区间方式删除d1.erase(d1.begin(), d1.end());//d1.clear();printDeque(d1);
}int main()
{test01();cout << endl;test02();cout << endl;test03();return 0;
}

在这里插入图片描述
这里有个坑需要避一下,就是当重复执行d1.erase(it);后程序运行会崩溃。

崩溃的原因是在执行d1.erase(it)之后,迭代器it失效了,不能再继续使用。在C++的STL中,当执行erase操作后,如果要继续使用迭代器进行遍历或删除元素,需要重新获取合法的迭代器。因此,连续两次执行d1.erase(it)会导致第二次的删除操作使用了一个已经无效的迭代器,从而产生错误。
要解决这个问题,可以在执行d1.erase(it)之后,重新获取合法的迭代器,再进行下一次的删除操作。以下是修改后的代码:

// 删除
deque<int>::iterator it = d1.begin();
it++;
d1.erase(it);// 重新获取合法的迭代器
it = d1.begin();
it++;
d1.erase(it);printDeque(d1);

这样修改后,就不会报错了。

总结:
插入和删除提供的位置是迭代器!
尾插-push_back
尾删-pop_back
头插-push_front
头删-pop_front

deque数据存取

功能描述:
对deque中的数据的存取操作
函数原型:

at(int idx); //返回索引idx所指的数据
operator[]; //返回索引idx所指的数据
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个数据元素
#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>d;d.push_back(10);d.push_back(20);d.push_back(30);d.push_front(40);d.push_front(50);d.push_front(60);//通过[]方式访问元素for (int i = 0; i < d.size(); i++){cout << d[i] << " ";}cout << endl;//通过at方式访问元素for (int i = 0; i < d.size(); i++){cout << d.at(i) << " ";}cout << endl;cout << "第一个元素为:" << d.front() << endl;cout << "最后一个元素:" << d.back() << endl;
}int main()
{test01();return 0;
}

在这里插入图片描述
总结:
除了用迭代器获取deque容器中元素,[]和at也可以
front返回容器第一个元素
back返回容器最后一个元素

deque排序

功能描述:
利用算法实现对deque容器进行排序
算法:

sort(iterator beg,iterator end) //对beg和end区间内元素进行排序
#include<iostream>
using namespace std;
#include<deque>
#include<algorithm>#include<vector>//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_back(30);d.push_front(40);d.push_front(50);d.push_front(60);printDeque(d);//排序deque<int>::iterator it1 = d.begin();++it1;deque<int>::iterator it2 = d.end();--it2;cout << "排序后:" << endl;sort(it1, it2);printDeque(d);cout << "vector排序:" << endl;vector<int>v;v.push_back(5);v.push_back(2);v.push_back(4);v.push_back(7);sort(v.begin(), v.end());for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}int main()
{test01();return 0;
}

在这里插入图片描述

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

相关文章:

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

deque插入和删除 功能描述&#xff1a; 向deque容器中插入和删除数据 函数原型&#xff1a; 两端插入操作&#xff1a; push_back(elem); //在容器尾部添加一个数据 push_front(elem); //在容器头部插入一个数据 pop_back(); //删除容器最后一个数据 pop_front(); //删除容器…...

案例12 Spring MVC入门案例

网页输入http://localhost:8080/hello&#xff0c;浏览器展示“Hello Spring MVC”。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case12-springmvc01。 2.配置Maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xm…...

【React】精选10题

1.React Hooks带来了什么便利&#xff1f; React Hooks是React16.8版本中引入的新特性&#xff0c;它带来了许多便利。 更简单的状态管理 使用useState Hook可以在函数组件中方便地管理状态&#xff0c;避免了使用类组件时需要继承React.Component的繁琐操作。 避免使用类组件…...

VS Spy++进程信息获取

查看进程中窗口信息。 Spy使用介绍 Windows下的程序及热键监视神器——Spy Word进程获取...

Java课题笔记~ SpringMVC概述

1.1 SpringMVC简介 SpringMVC 也叫Spring web mvc。是Spring 框架的一部分&#xff0c;在Spring3.0 后发布的。 1.2 SpringMVC的优点 基于MVC 架构 基于 MVC 架构&#xff0c;功能分工明确。解耦合。 容易理解&#xff0c;上手快&#xff0c;使用简单 就可以开发一个注解…...

SOPC之NIOS Ⅱ遇到的问题

记录NIOS Ⅱ中遇到的报错 一、NIOS II中Eclipse头文件未找到 问题&#xff1a;Unresolved inclusion: "system.h"等 原因&#xff1a;编译器无法找到头文件所在路径 解决方法&#xff1a; 在文件夹中找到要添加的头文件&#xff0c;并记录下其路径&#xff0c;如…...

uniapp uni-datetime-picker 日期和光标靠右

如果想在uni-datetime-picker组件中将日期和光标靠右&#xff0c;您可以使用自定义样式来实现。首先&#xff0c;您需要在页面的样式文件中定义一个类&#xff0c;用于定制uni-datetime-picker组件的样式。例如&#xff0c;你可以在App.vue或者页面的样式文件中添加以下代码&am…...

关于axios请求中的GET、POST、PUT、DELETE的一些认知

这篇写的特别好。而本文主要从实习用途中展开&#xff0c;不专业。 浅谈HTTP中Get、Post、Put与Delete的区别 1、Get 1、目前Get禁止使用requestBody形式传递值&#xff0c;如果使用了&#xff0c;后端会一直报错&#xff0c;让你确认是否有传递参数。 2、举例&#xff0c;模…...

go-zero 是如何做路由管理的?

原文链接&#xff1a; go-zero 是如何做路由管理的&#xff1f; go-zero 是一个微服务框架&#xff0c;包含了 web 和 rpc 两大部分。 而对于 web 框架来说&#xff0c;路由管理是必不可少的一部分&#xff0c;那么本文就来探讨一下 go-zero 的路由管理是怎么做的&#xff0c…...

Springboot集成ip2region离线IP地名映射-修订版

title: Springboot集成ip2region离线IP地名映射 date: 2020-12-16 11:15:34 categories: springboot description: Springboot集成ip2region离线IP地名映射 1. 背景2. 集成 2.1. 步骤2.2. 样例2.3. 响应实例DataBlock2.4. 响应实例RegionAddress 3. 打开浏览器4. 源码地址&…...

智能驾驶系列报告之一:智能驾驶 ChatGPT时刻有望来临

原创 | 文 BFT机器人 L3 功能加速落地&#xff0c;政策标准有望明确 L2 发展日益成熟&#xff0c;L3 功能加速落地。根据市场监管总局发布的《汽车驾驶自动化分级》与 SAE发布的自动驾驶分级标准&#xff0c;自动驾驶主要分为 6 个级别&#xff08;0 级到 5 级&#xff0c;L0 …...

设计HTML5文档结构

定义清晰、一致的文档结构不仅方便后期维护和拓展&#xff0c;同时也大大降低了CSS和JavaScript的应用难度。为了提高搜索引擎的检索率&#xff0c;适应智能化处理&#xff0c;设计符合语义的结构显得很重要。 1、头部结构 在HTML文档的头部区域&#xff0c;存储着各种网页元…...

vue echarts中按钮点击后修改值 watch数据变化后刷新图表

1 点击按钮 {feature: {myBtn1: {show: true,title: 反转Y轴,showTitle: true,icon: path://M512 0A512 512 0 1 0 512 1024A512 512 0 0 0 512 0M320 320V192h384v128zM128 416V288h256v128zM320 704V576h384v128zM128 800V672h256v128z,onclick: () > {dataSetting.rever…...

React antd tree树组件 - 父子节点没有自动关联情况下 - 显示半选、全选状态以及实现父子节点互动

实现的效果图如下&#xff1a; 如Ant Design Vue 中所示&#xff0c;并没有提供获取半选节点的方法&#xff0c;当设置checked和checkStrictly时&#xff0c;父子节点也不再自动关联了 前提&#xff1a;从后端可以获取的数据分别是完整的树型数据、所有选中的节点数据&#…...

优漫动游 大厂需要什么样的ui设计师呢?

通常来说大公司UI设计的流程主要是这样的&#xff1a;创意-头脑风暴-策划方案-交互设计&评审-美术设计&评审-开发实施&#xff0c;不过实际上大多数公司都有自己的一套流程&#xff0c;源于公司的基因、公司组织体系、公司领导风格。一起了解大厂需要什么样的ui设计师呢…...

TiDB Bot:用 Generative AI 构建企业专属的用户助手机器人

本文介绍了 PingCAP 是如何用 Generative AI 构建一个使用企业专属知识库的用户助手机器人。除了使用业界常用的基于知识库的回答方法外&#xff0c;还尝试使用模型在 few shot 方法下判断毒性。 最终&#xff0c;该机器人在用户使用后&#xff0c;点踩的比例低于 5%&#xff0…...

uniapp 使用canvas画海报(微信小程序)

效果展示&#xff1a; 项目要求&#xff1a;点击分享绘制海报&#xff0c;并实现分享到好友&#xff0c;朋友圈&#xff0c;并保存 先实现绘制海报 <view class"data_item" v-for"(item,index) in dataList" :key"index"click"goDet…...

TiDB 应急运维脚本,更加方便的管理TiDB集群

TiDB 应急运维脚本&#xff0c;更加方便的管理TiDB集群 使用方法 使用方法&#xff1a;[tidblocalhost ~]$ which tiup ~/.tiup/bin/tiup编辑脚本&#xff0c;MYSQL_PASSWD 和 PORT 根据实际替换 [tidblocalhost ~]$ vi ~/.tiup/bin/ti#version 1.1 #author guanguanglei ##…...

第二部分:AOP

一、AOP简介 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构。 AOP是OOP&#xff08;面向对象编程&#xff09;的进阶版。 作用&#xff1a;在不改变原始设计的基础上为其进行功能增强。 spring理念&#x…...

分享一组天气组件

先看效果&#xff1a; CSS部分代码&#xff08;查看更多&#xff09;&#xff1a; <style>:root {--bg-color: #E9F5FA;--day-text-color: #4DB0D3;/* 多云 */--cloudy-background: #4DB0D3;--cloudy-temperature: #E6DF95;--cloudy-content: #D3EBF4;/* 晴 */--sunny-b…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...