CMU15445 - Project 0. C++ Primer(在写)

news2025/1/18 9:56:40

文章目录

  • 系列笔记
  • 作业链接
  • TASK 1
    • Get
    • Put
    • Remove
  • Task 2

系列笔记

环境配置
Project 0. C++ Primer (ing)

作业链接

作业链接(2020,废)
作业链接
p0就是一个C++水平测试,很简单 2023的明显难不少。

TASK 1

先简单说一下看到这个数据结构时自己想到的一些问题与自己的思考:

  1. 为啥Put的实现这么奇葩,要求返回一颗新树,不会很耗资源吗?
    显而易见Put是比较耗资源的,但是没有想象中的那么耗资源,因为Trie其实不负责具体资源的分配的,Trie代表的仅仅是一些索引而已,里面只存了一堆指针。
  2. 为啥Get的实现要求先dynamic_cast到const TrieNodeWithValue<T>*,不嫌麻烦吗?*
    这其实是为了实现异类集合,想想就知道了。

Get

Get实现没啥难度,直接扫一遍key指针跟着跑就行,唯一一个小坑点是root_是个shared_ptr,不能直接做cast到裸指针,需要通过.get获取裸指针然后再做cast。

Put

Put实现开始就有点麻烦了,这个题目的主要问题是想要修改一棵树,根据题目要求,这个Put是要返回一颗新Trie的,拿官方例子中的添加[“ad”, 2]为例,如果我们自顶向下构造new trie,首先建立new root,然后我们在new root里添加一个[‘a’, Node2],然后在Node2里添加一个[‘d’, 2],这一步就卡住了——我们在root里存的node2的指针是指const的,加不了!

在这里插入图片描述
想清楚这一点就很好解决了,我们就自底向上构建树,先从头到尾扫一遍key,公共结点一路clone下来,非公共结点新建资源,存到栈里,然后使用最后的那个结点的child与函数参数value构造一个TrieNodeWithValue,再反向遍历key并依次弹出stack,利用map::operator[]建立一颗树即可。

Remove

Remove也就差不多的操作,首先扫一遍key,如果发现key不在Trie里或者key对应的结点压根没value,直接返回root无事发生,否则的话就入栈,然后用最后遍历到的那个结点的children去构造一个TrieNode并修改栈顶,然后依此出栈并erase掉children为empty的结点。

Task 2

没啥好说的,照着伪代码写就行,只要Task1没问题,Task2就不会有太大问题,记得写Put的时候别忘了move传value就行。

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

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

相关文章

linux 目录常用操作

1.linux复制粘贴命令 CtrlShiftC 复制 CtrlShiftV 粘贴 2.中断执行 CtrlC 键“保留”用于停止命令 3.终端清屏 clear 4.显示当前路径 pwd 5.进入目录 cd 目录名称 返回上级目录 cd .. 6.查看当前目录 ls查看详细信息 ls -l 7.创建目录&#xff08;可以理解为文件夹&…

怎么将太大的word文档压缩变小,3个高效方法

怎么将太大的word文档压缩变小&#xff1f;word文档是我们在办公中使用较多的文件格式之一&#xff0c;相信小伙伴们会遇到这样的问题&#xff0c;编辑完成word文档之后发现&#xff0c;编辑完的文档体积太大了&#xff0c;无论是发送给客户还是上传到邮箱中都不方便&#xff0…

pdf转成word | ppt | jpg图片,免费一键转换教程

我不允许真的还有人不知道如何免费将pdf转成 ppt、word 或者 jpg图片&#xff01; 职场小伙伴是不是会经常遇到pdf怎么转成word&#xff0c;pdf怎么转成word&#xff0c;pdf怎么jpg图片等问题&#xff1f;别再为pdf转化格式难、而且还要付费而发愁了&#xff01;这份pdf免费一…

设计模式-行为型模式之观察者模式

3. 观察者模式 3.1. 模式动机 建立一种对象与对象之间的依赖关系&#xff0c;一个对象发生改变时将自动通知其他对象&#xff0c;其他对象将相应做出反应。在此&#xff0c;发生改变的对象称为观察目标&#xff0c;而被通知的对象称为观察者&#xff0c;一个观察目标可以对应多…

重学Java设计模式-行为型模式-迭代器模式

重学Java设计模式-行为型模式-迭代器模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-23-重学 Java 设计模式《实战迭代器模式》.html#重学-java-设计模式-实战迭代器模式「模拟公司组织架构树结构关系-深度迭代遍历人员信息输出场景」 迭代…

R -- 用psych包做主成分分析

主成分分析 主成分分析是一种数据降维方式&#xff0c;他将大量相关变量转化为一组很少的不相关的变量&#xff0c;这些不相关的变量称为主成分。 人话版&#xff1a;给你发一个由18位数字组成的身份证号码&#xff0c;第1、2位数字表示所在省份的代码&#xff1b;第3、4位数…

深度学习笔记之残差网络(ResNet)

深度学习笔记之残差网络[ResNet] 引言引子&#xff1a;深度神经网络的性能问题核心问题&#xff1a;深层神经网络训练难残差网络的执行过程残差网络结构为什么能够解决核心问题残差网络的其他优秀性质 引言 本节将介绍残差网络( Residual Network,ResNet \text{Residual Netwo…

C#中用程序代码修改了datagridview中的数据,保存时只对光标当前行有保存解决办法

C#中DataGridView绑定了DataTable后&#xff0c;通过代码修改DataGridView中的数据&#xff0c;总有一行&#xff08;被修改过并被用户选中的行集合中索引为0的行&#xff09;不能被UpDate回数据库的问题和解决办法 长江黄鹤 2017-06-26 | 300阅读 | 1转藏 转藏全屏朗读分…

【JavaScript】初入前端,记录JavaScript学习过程

文章目录 一、下面将是你在本教程中学到的主要内容1. JavaScript直接写入HTML输出流2. JavaScript对事件的反应3. JavaScript&#xff1a;改变 HTML 内容4. JavaScript 改变HTML图像5. 改变HTML样式6. JavaScript 验证输入 二、JavaScript 语法学习1. JavaScript的位置2. 浏览器…

如何在硬盘上恢复已经删除的照片?

可以从硬盘恢复删除的照片吗&#xff1f; 旅行后&#xff0c;许多人倾向于将照片保存到另一个储存设备作为副本或备份。例如&#xff0c;将它们存储在外部硬盘上或将图片传输到电脑。但是在整理照片的时候&#xff0c;很可能不小心把照片删掉了&#xff0c;尤其是使用外接硬…

成都爱尔樊映川:视网膜上视觉最敏锐部位,出问题怎么办

视网膜后极部有一直径约 2mm 的浅漏斗状小凹陷区&#xff0c;该区含有丰富的叶黄素呈现椭圆形黄色&#xff0c;称为“黄斑”&#xff0c;是视网膜上视觉最敏锐的部位。 它主要与精细视觉及色觉等视功能有关。正常情况下&#xff0c;外界物体光线进入眼内&#xff0c;投影在黄斑…

【项目开发】二开系统,费了好大劲,才整好,规划业务逻辑太重要了

作为程序员一天不写代码&#xff0c;不会咋样&#xff0c;第二天会比较生疏&#xff0c;所以小编也不能闲着&#xff0c; 3天的时间吧&#xff0c;搞了个羽毛球场地预约系统&#xff0c;看着场地预约页面比较简单&#xff0c; 小编下班回家&#xff0c;搞了2个晚上&#xff0c…

开发常用的 Linux 命令2(文件的查看、搜索和权限)

开发常用的 Linux 命令2&#xff08;文件的查看、搜索和权限&#xff09; 作为开发者&#xff0c;Linux是我们必须掌握的操作系统之一。因此&#xff0c;在编写代码和部署应用程序时&#xff0c;熟练使用Linux命令非常重要。这些常用命令不得不会&#xff0c;掌握这些命令&…

【MySQL】增删改查基本操作

目录 上篇在这里喔~ 增删改查1 1.条件查询WHERE 1.查询语文成绩大于60的同学 2.查询语文成绩等于NULL的同学 3.查询语文成绩在60-90之间的同学 4.查询英语成绩等于30&#xff0c;77&#xff0c;90的所有同学 5.查询小锦鲤的语文成绩是否为空 6.查询姓孙的同学的所有信息 …

shiro漏洞复现及其攻击流量分析

前言 最近面试时经常被问到&#xff0c;每次说的都不太完美&#xff0c;现在再来复现一边。 shiro介绍 Apache Shiro是一个开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。 CVE-2016-4437 利用vulhub搭建的靶场。 在Apache Shiro < 1.2.4版本中存在反…

Servlet 之超详解【2023年最新版】

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 服务器软件&#xff1a;apache-tomcat-8.5.27 目录 一. 什么是Servlet&#xff1f;二. 如何编写第一个servlet程序&#xff1f;三. Servlet的生命周期四. Servlet的技术体系五. web项…

Flutter Animation 动画

前言 &#xff1a; 在Flutter 中&#xff0c;做动画离不开这么一个类&#xff0c;那就是 Animation 这个类如往常一样&#xff0c;也是一个抽象类。 abstract class Animation<T> extends Listenable implements ValueListenable<T> 整个animation.dart 文件只有…

Windows和IDEA安装Scala

一、Windows安装Scala 前提&#xff1a;Windows已经安装好JDK1.8 第一步&#xff0c;下载对应的 Scala 安装文件 scala-2.12.11.zip (尚硅谷资料里有。直接获取&#xff09; 第二步&#xff0c;解压scala-2.12.11.zip 注意自己解压的目录&#xff0c;我这里解压到D盘java文…

3、ThingsBoard使用jar包单机部署

1、概述 前面一节我讲了如何初始化数据库表结构以及默认的数据。这一节我将讲解如何使用jar包部署。 2、部署 2.1、修改thingsboard.yml配置 上一节我已经讲解了thingsboard.yml中的基础配置,基础的组件配置如何redis、kafka、Cassandra、pg等大家都知道,关键的地方是在于…

Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析

Zimbra 远程代码执行漏洞(CVE-2019-9670)漏洞分析 漏洞简介 Zimbra是著名的开源系统&#xff0c;提供了一套开源协同办公套件包括WebMail&#xff0c;日历&#xff0c;通信录&#xff0c;Web文档管理和创作。一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决…