c++初阶数据结构速成

news2024/10/17 13:01:24

温馨提示:本篇文章只给大家介绍初阶数据结构的一些常用接口

stl的简单介绍

什么是stl?

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的 组件库,而且是一个包罗数据结构与算法的软件框架

总结:一个可复用,同时又包含了数据结构和算法的软件框架。

STL的六大组件

vector篇(顺序表)

初始化部分

基本上的数据结构都离不开我们先前所讲的含参构造,无参构造,初始化列表

拷贝构造

迭代部分

begin

使用方式:对象名.begin();  

作用:用于获取第一个元素的迭代器

end

使用方式:对象名.end();  

作用:用于获取最后一个元素的迭代器

那么来看一下加了r后的变化

rbegin

使用方式:对象名.rbegin();  

作用:用于获取最后一个元素

rend

使用方式:对象名.rend();  

作用:用于获取第一个元素

从上面可以得知:加了r之后,我们可以发现rbegin与begin的作用完全相反,那么end和rend也是一样

容量部分

接口名                  作用

 size                      获取数据个数

capacity                获取容量大小

empty                    判断是否为空

resize                    改变vector的size

reserve                  改变vector的capacity

那么它们的使用方式也是对象名.接口名()

增删查改部分

接口名                    作用 

push_back              尾插

pop_back                尾删

find                          查找

inser                        在position之前插入val

erase                       删除position位置的数据

swap                       交换两个vector的数据空间

operator[ ]               像数组一样访问

小试牛刀

. - 力扣(LeetCode)

想必大家看到这题都会有思路,但是重点不在这里

 

从它的答题区我们可以看到不是和以前一样,那么这样就无从下手了吗?

其实它的核心逻辑我们依旧可以用,但是在使用核心逻辑之前我们需要给它来个初始化。

先前我们讲了resize是改变vector的长度,因此我们先定义一个二维数组,并且用for循环将二维数组内的每个元素进行初始化。最后就是再加上我们杨辉三角的核心逻辑,那么这样这道题就搞定了

源代码:

class Solution {

public:

    vector<vector<int>> generate(int numRows) {

     vector<vector<int>> ret(numRows);

     for(int i = 0; i < numRows; i++)

     {

        ret[i].resize(i + 1, 0);

        ret[i].front() = ret[i].back() = 1;

     }

     for(int i = 0; i < ret.size(); i++)

     {

        for(int j = 1; j < ret[i].size() - 1; j++)

        {

           ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];

        }

     }

     return ret;

    }

};

那么这里给大家看个错误的代码

那么这个代码在哪里呢?它出错在ret[i].begin()和ret[i].end()。

其实这里有个易混淆的点

begin()&end() 与 front()&back()的区别

总结:begin()&end()返回的是迭代器,front()&back()返回的是变量的引用

拓展提升(了解)

list篇(链表)

这里的初始化部分都与vector的初始化相同,除此之外与vector相同的还有容量部分和增删查改部分。

常用的部分接口

函数声明                                                接口说明

(容量部分)

empty                                                     检测list是否为空,是返回true,否则返回false 

size                                                         返回list中有效节点的个数

(迭代部分)

front                                                        返回list的第一个节点中值的引用

back                                                        返回list的最后一个节点中值的引用

(增删查改部分)

push_front                                              在list首元素前插入值为val的元素

pop_front                                                删除list中第一个元素

pop_back                                                删除list中最后一个元素

push_back                                             在list尾部插入值为val的元素

迭代器失效

概念:迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。

稍微通俗一点地讲就是与野指针、空指针一样的道理。

“症状”:

错误的源代码:

当然在哪里出错上面的这张图片已经写出来了,那么具体是个什么情况我们来看下面这张图

 从上面这张图中我们可以看到一个现象,在程序走完erase语句后it已经变成了一个随机数,那么此时再加加i自然也就会报错。

那么在写其他代码的时候如何发现这个错误,首先调试是第一,其次就是要有代码逻辑上的辅助,一步一步去推断。

正确源代码:

stack篇(栈)

接口名                                                   作用

stack()                                                   构造空的栈

empty()                                                 检测stack是否为空

size()                                                    返回stack中元素的个数

top()                                                     返回栈顶元素的引用

push()                                                  将元素val压入stack中

pop()                                                    将stack中尾部的元素弹出

那么以上也是stack的基本接口,还有一些接口与vector的类似,具体的可以自行去官方文档查找

queue篇(队列)

函数声明                                         接口说明

queue()                                           构造空的队列

empty()                                           检测队列是否为空,是返回true,否则返回false

size()                                              返回队列中有效元素的个数

front()                                             返回队头元素的引用

back()                                             返回队尾元素的引用

push()                                            在队尾将元素val入队列

pop()                                              将队头元素出队列

那么以上也是queue的基本接口,还有一些接口与vector的类似,具体的可以自行去官方文档查找

priority_queue的介绍和使用

那么这里需要知道的是priority_queue是一个容器,并且是优先队列。

函数声明                                                           接口说明

priority_queue()/priority_queue(first, last)        构造一个空的优先级队列

empty( )                                                        检测优先级队列是否为空,是返回true,否则返回false top( )                                                             返回优先级队列中最大(最小元素),即堆顶元素 push(x)                                                         在优先级队列中插入元素x pop()                                                              删除优先级队列中最大(最小)元素,即堆顶元素

deque的简单介绍(了解)

deque(双端队列):是一种双开口的"连续"空间的数据结构

dequeue的优缺点

优点

1. 头部插入和删除时,不需要搬移元素,效率特别高,而且在扩 容时,也不需要搬移大量的元素,因此其效率是比vector高的。

2. 与list比较,其底层是连续空间,空间利用率比较高

缺点

1. 不适合遍历

原因:dequeue的迭代器需要频繁检查其是否移动到了某段空间的边界

 拓展介绍

什么是适配器

概念:适配器是一种设计模式,这个设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结

作用:将一个类的接口转换成客户希望的另外一个接口。

那么基本上的容器也都讲完了,除了一个string和剩余没讲的几个接口外,不过string我也尽量从开一篇文章进行讲解,那么本篇文章就先到这里,我们下期再见!!!

都看到这里了,给个三连呗,谢谢啦!!!

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

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

相关文章

Redis 哨兵模式下DB库操作审计

Redis Sentinel集群环境 主机版本模式NodeSentinelredis-sentinel-node-06.2.12哨兵MasterYesredis-sentinel-node-16.2.12哨兵SlaveYesredis-sentinel-node-26.2.12哨兵SlaveYes 架构设计 命令行&程序验证 1、在redis-sentinel-node-1上使用redis-cli 连接redis-sentine…

2024台州赛CTFwp

备注&#xff1a; 解题过程中&#xff0c;关键步骤不可省略&#xff0c;不可含糊其辞、一笔带过。解题过程中如是自己编写的脚本&#xff0c;不可省略&#xff0c;不可截图&#xff08;代码字体可以调小&#xff1b;而如果代码太长&#xff0c;则贴关键代码函数&#xff09;。…

开放式蓝牙耳机哪个品牌好用?开放式耳机排行榜测评!

开放式耳机&#xff0c;因其特殊的不入耳佩戴模式&#xff0c;让使用者在享受音乐或者进行通话的过程中&#xff0c;依然可以对外界声音保持敏感。在户外运动场景下&#xff0c;这种特性优势尽显&#xff0c;既保证了耳机佩戴的稳定和舒适&#xff0c;又提高了运动的安全性。为…

Netty结构

Netty结构 引导器Bootstrap举例&#xff1a;一个简单的HTTP服务器服务端启动类服务端业务逻辑处理类 二级目录Channel初始化&#xff08;设置Channel类型&#xff09;注册ChannelHandler结合HTTP请求-响应&#xff0c;分析数据在ChannelPipeline中的流向 设置Channel参数端口绑…

java互联网医院智能导诊系统源码,Uniapp前端开发框架,支持一次编写,多端运行

智慧导诊系统源码&#xff0c;java源码&#xff0c;大屏机自动导诊&#xff0c;互联网医院智能导诊系统源码 老是全身无力&#xff0c;挂什么科&#xff1f; 经常头痛&#xff0c;挂什么科&#xff1f; 总是失眠&#xff0c;又得挂哪个科&#xff1f; 世界上最遥远的距离再加…

初识git · 多人协作

目录 前言&#xff1a; 多人协作一 多人协作二 前言&#xff1a; git从发布以来&#xff0c;强大的功能有版本回退以及分支管理&#xff0c;那么分支管理用来不仅是为了维护master的&#xff0c;更多的是多人协作的一种代表&#xff0c;所以多人协作这一章节&#xff0c;基…

2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序

2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂&#xff0c;同时在铁路线上增建一个车站&#xff0c;用来运送成品油。由于这种模式具有一定的普遍性&#xff0c;油田设计院希望建立管线建设费用最省的一般数学模型与方法。   1. 针对两炼…

基于SpringBoot农场管理平台【附源码】

基于SpringBoot农场管理平台 效果如下&#xff1a; 系统首页界面 系统注册页面 农业生产资料详细页面 个人中心界面 管理员登录界面 管理员主界面 用户管理界面 资料分类管理界面 方法分类管理界面 计划分类管理界面 农业生产资料管理界面 研究背景 农业是人类社会发展的基石…

实现vlan间的通信

方法一&#xff1a;单臂路由 概述 单臂路由是一种网络配置&#xff0c;它允许在路由器的一个物理接口上通过配置多个子接口来处理不同VLAN的流量&#xff0c;从而实现VLAN间的通信。 原理 路由器重新封装MAC地址&#xff0c;转换Vlan标签 基础模型 1、配置交换机的链…

【openGL学习笔记】----GLFW、GLAD环境配置

glew、glad、freeglut、glfw的区别&#xff1f; glew&#xff08;The OpenGL Extension Wrangler Library&#xff09;是对底层OpenGL接口的封装&#xff0c;可以让你的代码跨平台。glad与glew作用相同&#xff0c;可以看作它的升级版。Freeglut&#xff08;OpenGL Utility To…

H5开发指南|掌握核心技术,玩转私域营销利器

随着互联网技术的不断发展和用户需求的日益增长&#xff0c;H5页面逐渐成为了企业和个人展示信息、吸引用户关注的重要手段。具有跨平台兼容性强、网页链接分享、更新迭代方便快捷、低开发成本、可搜索和优化、数据分析与追踪、灵活性与扩展性以及无需下载安装等特点。不仅可以…

pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover&#xff08;悬停&#xff09; 定义&#xff1a;发起交互的对象停留在可交互对象的交互区域。例如&#xff0c;当手触摸到物品表面&#xff08;可交互区域&#xff09;时&#xff0c;视为触发了Hover。 Grab&#xff08;抓取&#xff09; 概念&#xff…

Redis 三 Redis分布式锁

Redis 实战应用 文章目录 Redis 实战应用Redis 实现全局唯一IDRedis解决购物秒杀思路超卖问题一人一单集群并发的问题分布式锁Redis分布式锁的实现核心思路实现分布式锁版本一Redis分布式锁误删情况Redis分布式锁原子性问题 Redis 实现全局唯一ID 全局ID生成器&#xff0c;是一…

【排序】——1.冒泡排序法(含优化)

冒泡排序 1.原理 左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例) 从左到右&#xff0c;相邻元素进行比较。 每次比较一轮&#xff0c;就会找到序列中最大的一个&#xff08;最小的一个——降序&#xff09;。这个数就会从序列的最右边冒出来。 以…

NetSarang Xshell v8.0060 Linux终端管理器个人免费版

NetSarang Xshell 官方个人完全免费中文版&#xff0c;Xshell特别版&#xff0c;Xshell 个人完全免费&#xff0c;Xshell 是一款最好用的Linux远程连接工具&#xff0c;免费SSH客户端、主机服务器远程管理客户端 。Xshell&#xff0c;轻松管理远程服务器&#xff0c;会话管理器…

16进制数据如何得到奇偶校验位??

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

详解mac系统通过brew安装mongodb与使用

本文目录 一、通过brew安装MongoDB二、mongodb使用示例1、启动数据库2、创建/删除数据库3、创建/删除集合 三、MongoDB基本概念1&#xff09;数据库 (database)2&#xff09;集合 &#xff08;collection&#xff09;3) 文档&#xff08;document&#xff09;4&#xff09;mong…

海博思创神秘股东捡漏入股,是否存利益输送?关联交易信披不一致

作者&#xff1a;Eric 来源&#xff1a;IPO魔女 今日&#xff0c;北京海博思创科技股份有限公司&#xff08;简称海博思创&#xff09;上会&#xff0c;将冲刺科创板。海博思创是储能设备生产集成商&#xff0c;处于产业链的中游&#xff0c;主要产品为电化学储能系统。 IPO魔…

护眼台灯横评:书客、柏曼、明基哪款使用体验好,又能护眼?

如果你使用过护眼台灯&#xff0c;就太能理解为什么护眼台灯会诞生了。护眼台灯确实有一定的护眼作用&#xff0c;光线柔和不刺眼&#xff0c;许多护眼台灯还有智能调光、定时休息等人性化功能。在当今这个数字化时代&#xff0c;长时间面对电脑屏幕或埋头于书本已成为许多人的…

美国的云服务器什么价格能买到?

美国的云服务器什么价格能买到&#xff1f;美国的云服务器价格月租费用一般在70元至数千元人民币不等&#xff0c;基础配置的云服务器月租金可能在20至50美元之间&#xff0c;而高端配置的云服务器月租金可能达到150至500美元。美国的云服务器价格因多个因素而异&#xff0c;包…