CMU15-445 Project0

news2024/9/27 2:45:52

CMU14445

Task #1 - Copy-On-Write Trie

  • Get()思路:
    获取根节点指针,顺着key逐字符往下找节点,最后根据题意可以使用dynamic_cast检查是否是TrieNodeWithValue(dynamic_pointer_cast也可以),以下为两者用法:

    auto value_node = std::dynamic_pointer_cast<const TrieNodeWithValue<T>>(cur));
    auto value_node = dynamic_cast<const TrieNodeWithValue<T>*>(cur.get())
    
  • Put()思路:
    1)若Trie是空,先创建新节点作为根节点,否则,克隆根节点。
    2)若key为空,根节点转化为TrieNodeWithValue后返回。
    3)指针cur指向原Trie以便顺着key逐字符往下找节点,指针ret_prev,ret_cur,ret_next分别用于指向上一个节点,当前节点,下一个节点。ret_next cur下一个节点的克隆,随后修改ret_cur的对于字符索引为ret_next
    4)key处理完后,通过ret_prevret_cur处理最后的节点,即通过ret_cur构造TrieNodeWithValue节点挂在ret_prev上即可。

  • Remove()思路:
    1)若Trie是空,直接返回空Trie
    2)顺着key逐字符向下找路径,用栈记录,栈中元素为即为map对应的键和值。
    3)此时,从栈顶到栈底的顺序即为key路径节点的逆序,其中栈底对应根节点。先将key对应的节点TrieNodeWithValue替换为TrieNode
    4)若是key是空,则直接将根节点TrieNodeWithValue替换为TrieNode返回。
    5)若是key对应的节点没有分支,则通过栈回溯路径节点,该删的删,一旦删不了就break
    6)若栈空且根节点无分支就说明Trie删成了空,返回空Trie,否则不断出栈,获取根节点并返回。

Task #2 - Concurrent Key-Value Store

没啥难度,仔细读题,理解题意即可,需要注意Trie.Put()并不是在原Trie上添加,而是返回一个新的Trie。加锁和解锁可以简单使用mutex.unlock() mutex.lock()即可。

Task #3 - Debugging

我个人是使用Clion进行该项目的,按要求进行断点设置,查看变量即可,很快。

Task #4 - SQL String Functions

upperlower按要求写就行,当时我用的时std::transform算法来实现的,并遇到了一些问题,见此。随后在plan_func_call.cpp中按所给注释写就行。

总结

这个project除了Task1刚上手有些陌生且思路不是太清晰写起来费些时间,之后几个就很快。借此,复习太久没动过的C++,重新认识了智能指针等C++技术和特性。

在这里插入图片描述

所遇问题

简单记下所遇问题,希望会对你有所帮助。

  • 关于项目本身,不一定是要clone这个项目的最新版,而是要根据你所处的学期clone对应的版本

  • 关于代码编辑器,我选择Clion,相比于VScode更加便于调试和上手

  • 关于编译器,项目要求是clang,但我这里默认是gcc g++,可以按照下面在bustub目录下CMakeLists.txt的开始处添加如下两行进行设置

    set(CMAKE_C_COMPILER "/usr/bin/clang-14")
    set(CMAKE_CXX_COMPILER "/usr/bin/clang++-14")
    
  • 关于格式化,网上找对应google格式clang-format文件,复制到bustub目录下的clang-format文件,并确保如下设置,所若google那个代码规格文档,说行长不过80,但一些特殊的情形除外,但clang-format并无法识别,故在这里认为设置为120,避免上传提交时再次修改

    ColumnLimit:     120
    

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

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

相关文章

OpenHarmony关系型数据库

1 概述 关系型数据库(Relational Database, 以下简称RDB)是一种基于关系模型来管理数据的数据库&#xff0c;是在SQLite基础上提供一套完整的对本地数据库进行管理的机制&#xff0c;为开发者提供无需编写原生SQL语句即可实现数据增、删、改、查等接口&#xff0c;同时开发者也…

css设置不可点击

文章目录 一、前言二、MDN三、使用四、注意五、总结六、最后 一、前言 在网页开发中&#xff0c;经常会遇到一种情况&#xff0c;就是需要将某个元素的点击事件屏蔽&#xff0c;使其在用户点击时没有任何反应。这时候&#xff0c;我们可以通过CSS的pointer-events属性设置为no…

Jmeter接口测试总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Jmeter介绍&测试准备 Jmeter介绍&#xff1a;Jmeter是软件…

PositiveSSL多域名通配符证书买一年送一月

SSL数字证书是一种安全协议&#xff0c;用于在网络通信中提供加密和身份验证服务&#xff0c;是保护网站安全的重要手段之一。PositiveSSL是Sectigo旗下的子品牌&#xff0c;经营着各种SSL证书&#xff0c;例如&#xff0c;单域名SSL证书、多域名SSL证书、通配符SSL证书和多域名…

Java通过模板替换实现excel的传参填写

以模板为例子 将上面$转义的内容替换即可 package com.gxuwz.zjh.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.HashMap; import java.util.Map; import java.io.IOException; impor…

RISC-V RVWMO 内存模型解释

RISC-V RVWMO 内存模型解释 引言 本文介绍 RISC-V RVWMO 内存模型。RVWMO 内存模型定义了什么样的全局内存顺序才是合法的。本引言部分将解释为什么会出现不合法的全局内存顺序&#xff0c;以及为什么需要内存模型。 首先引起乱序的全局内存顺序&#xff08;指令重排序&…

AI作画工具 stable-diffusion-webui 一键安装工具(A1111-Web-UI-Installer)

安装 下载最新版本确保你的 NVIDIA 显卡驱动程序是最新的&#xff08;起码不能太老&#xff09;启动安装程序在欢迎屏幕上单击下一步在屏幕上&#xff0c;选择要安装的内容如果你已经安装了 Python 3.10 和 Git&#xff0c;那么可以取消选中如果你不知道这些是什么&#xff0c…

精品基于Uniapp+springboot助农管理系统App农产品积分购物商城

《[含文档PPT源码等]精品基于Uniappspringboot助农管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm 安卓…

解析MySQL生产环境CPU使用率过高的排查与解决方案

引言 在生产环境中&#xff0c;MySQL作为一个关键的数据库组件&#xff0c;其性能对整个系统的稳定性至关重要。然而&#xff0c;有时候我们可能会遇到MySQL CPU使用率过高的问题&#xff0c;这可能导致系统性能下降&#xff0c;应用页面访问减慢&#xff0c;甚至影响到用户体…

数据结构与算法——队列

概述 计算机科学中&#xff0c;queue 是以顺序的方式维护的一组数据集合&#xff0c;在一端添加数据&#xff0c;从另一端移除数据。添加的一端称为尾&#xff0c;移除的一端称为头。 功能 插入offer(value : E) : boolean  取值并移除poll() : E  取值peek() : E  判断…

Redis案例-微信抢红包

Redis案例-微信抢红包 1、业务描述 ​ 微信红包&#xff0c;一个人能发红包&#xff0c;红包的分发规则&#xff0c;红包能被几个人抢&#xff0c;超过24小时没有人领取自动退回原账户&#xff0c;红包详情页面有每个人的抢红包记录&#xff0c;包括金额大小和时间&#xff0…

统计学-R语言-7.3

文章目录 前言总体方差的检验一个总体方差的检验两个总体方差比的检验 非参数检验总体分布的检验正态性检验的图示法Shapiro-Wilk和K-S正态性检验总体位置参数的检验 练习 前言 本篇文章继续对总体方差的检验进行介绍。 总体方差的检验 一个总体方差的检验 在生产和生活的许多…

使用BootStrapBlazor组件搭建Bootstarp风格的Winform界面

项目地址https://gitee.com/zhang_jie_sc/my-blazor-winforms 1.安装Bootstrap.Blazor.Templates 模板 在power shell中输入dotnet new install Bootstrap.Blazor.Templates::7.6.1&#xff0c;安装7.6.1是因为版本8以后就要强制使用net8.0了&#xff0c;很多语法不一样&…

了解WPF控件:ToggleButton和Separator常用属性与用法(十三)

掌握WPF控件&#xff1a;熟练ToggleButton和Separator常用属性&#xff08;十三&#xff09; ToggleButton 一个按钮类UI元素&#xff0c;它的特点是拥有两种状态&#xff1a;选中&#xff08;Checked&#xff09;和未选中&#xff08;Unchecked&#xff09;。当用户单击Togg…

pve8.1 安装、创建centos7虚拟机及配置

之前创建虚拟机centos7时&#xff0c;硬盘分配太大了&#xff0c;做成模板后无法进行修改了&#xff0c;安装完pve8.1后&#xff0c;强迫症犯了重新创建一下顺便记录一下配置过程。由于目前centos7还是生产用的比较多的版本所以本次还是安装centos7.9版本。 一、下载镜像 下载…

使用 CDC MinIO 汇入端为 CockroachDB 保持持久数据

CockroachDB 数据库迅速崭露头角&#xff0c;作为一个坚韧且可扩展的分布式 SQL 数据库。它从其昆虫名字的坚持不懈中汲取灵感&#xff0c;即使面对硬件故障&#xff0c;CockroachDB 也能保证高可用性。其分布式架构横跨多个节点&#xff0c;类似于其昆虫原型的适应性。 凭借强…

dos攻击与ddos攻击的区别

①DOS攻击&#xff1a; DOS&#xff1a;中文名称是拒绝服务&#xff0c;一切能引起DOS行为的攻击都被称为dos攻击。该攻击的效果是使得计算机或网络无法提供正常的服务。常见的DOS攻击有针对计算机网络带宽和连通性的攻击。 DOS是单机于单机之间的攻击。 DOS攻击的原理&#…

JavaScript学习-原型和原型链

原型和原型链 示例代码 //创建一个Person类 class Person {constructor(name) {this.name name;}drink() {console.log(喝水);} } //创建一个Teacher类&#xff0c;继承Person class Teacher extends Person {constructor(name, subject) {super(name);this.subject subjec…

详细解读vcruntime140_1.dll修复的手段,如何快速解决vcruntime140_1.dll丢失问题

当出现“无法找到vcruntime140_1.dll”或程序“未能正常启动”时&#xff0c;这通常指示系统中缺失了一个关键文件&#xff1a;vcruntime140_1.dll。作为Visual C Redistributable组件的一部分&#xff0c;这个小文件在很多用Visual Studio编译的C程序运行时发挥着重要作用。解…

go语言(十八)---- goroutine

一、goroutine package mainimport ("fmt""time" )func main() {//用go创建承载一个形参为空&#xff0c;返回值为空的一个函数go func() {defer fmt.Println("A.defer")func() {defer fmt.Println("B.defer")//退出当前goroutinefmt…