CMU15-445 Project0

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.mzph.cn/news/650547.shtml

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

相关文章

Making Large Language Models Perform Better in Knowledge Graph Completion论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题KGC方法LLM幻觉现象解决方案 2.数据集和模型构建数据集模型方法基线方法任务模型方法基于LLM的KGC的知识前缀适配器知识前缀适配器 与其他结构信息引入方法对比 3.实验结果与分析结果分析&#xff1a;可移植性实验&#xff1…

SQL 关键字参考手册(二)

目录 SQL 关键字 SQL CREATE TABLE 关键字 CREATE TABLE 使用另一个表创建表 SQL CREATE PROCEDURE 关键字 CREATE PROCEDURE SQL CREATE UNIQUE INDEX 关键字 CREATE UNIQUE INDEX SQL CREATE VIEW 关键字 CREATE VIEW 查询视图 SQL DATABASE 关键字 CREATE DATA…

Web3 游戏开发者的数据分析指南

作者&#xff1a;lesleyfootprint.network 在竞争激烈的 Web3 游戏行业中&#xff0c;成功不仅仅取决于游戏的发布&#xff0c;还需要在游戏运营过程中有高度的敏锐性&#xff0c;以应对下一次牛市的来临。 人们对 2024 年的游戏行业充满信心。A16Z GAMES 和 GAMES FUND ONE …

【VUE】v-if 和 v-show 大详解(多角度分析+面试简答版)

多角度分析+面试简答版 一、`v-if` 和 `v-show` 的区别之多角度分析控制手段:编译过程:编译条件:性能消耗:总结使用场景二、 `v-if`、`v-show`、`display:none` 和`visibility: hidden` 的区别三、简洁版回答:`v-show` 与 `v-if` 比较一、v-if 和 v-show 的区别之多角度分…

网络安全热门岗位大盘点

网络安全已成为当今社会不可或缺的重要领域&#xff0c;国家和企业越来越重视网络安全&#xff0c;众多厂商也纷纷加大网络安全岗位的招聘力度。如果你对网络安全感兴趣&#xff0c;不妨了解一下这些热门岗位&#xff01; &#x1f3af;首席信息官&#xff08;CISO&#xff09;…

【iOS ARKit】同时开启前后摄像头BlendShapes

在上一节中已经了解了 iOS ARkit 进行BlendShapes的基本操作&#xff0c;这一小节继续实践同时开启前后摄像头进行人脸捕捉和世界追踪。 iOS设备配备了前后两个摄像头&#xff0c;在运行AR 应用时&#xff0c;需要选择使用哪个摄像头作为图像输人。最常见的AR 体验使用设备后置…

vue项目中使用Element多个Form表单同时验证

一、项目需求 在项目中一个页面中需要实现多个Form表单&#xff0c;并在页面提交时需要对多个Form表单进行校验&#xff0c;多个表单都校验成功时才能提交。 二、实现效果 三、多个表单验证 注意项&#xff1a;多个form表单&#xff0c;每个表单上都设置单独的model和ref&am…

单片机学习笔记---矩阵键盘密码锁

目录 一&#xff0c;设置密码按键 1.设置密码区域 2.设置输入的数字左移 3.设置记录按键的次数 二&#xff0c;设置确认键 1.密码正确时显示OK 2.密码错误时显示ERR 3.密码错误恢复初始状态重输 三&#xff0c;设置取消键 学了这么久&#xff0c;迫不及待想要做一个密…

bind函数的认识与基本使用

目录 测试代码 使用测试 预留参数测试 关于细节可以参考文献 第六节 std::bind 绑定器 - 知乎 (zhihu.com) 为了后续工作&#xff0c;需要了解bind的使用 简单来说就是为一个函数绑定一个参数&#xff0c;以方便后续调用函数的时候不需要传参进去 测试代码 #include <…

uni-app 接口封装,token过期,自动获取最新的token

一、文件路径截图 2、新建一个文件app.js let hosthttp://172.16.192.40:8083/jeecg-boot/ //本地接口 let myApi {login: ${host}wx/wxUser/login, //登录 } module.exports myApi 3、新建一个文件request.js import myApi from /utils/app.js; export const r…

HbuilderX报错“Error: Fail to open IDE“,以及运行之后没有打开微信开发者,或者运行没有反应的解决办法

开始 问题:HbuilderX启动时,打开微信开发者工具报错"Error: Fail to open IDE",以及运行之后没有打开微信开发者,或者运行没有反应的解决办法! 解决办法: 按照步骤一步一步完成分析,除非代码报错,否则都是可以启动的 第一步:检查HbuildX是否登录账号 第二步:检查微信…

运行adprep /forestprep扩展Active Directory架构

运行 adprep /forestprep 是为了扩展Active Directory架构&#xff0c;以便为整个林添加新版本Windows Server所支持的新类、属性和其他目录对象。在升级到更高版本的Windows Server并提升林功能级别之前&#xff0c;通常需要执行此操作。 以下是详细步骤&#xff1a; 确认环境…

C语言第十弹---函数(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数 1、函数的概念 2、库函数 2.1、标准库和头文件 2.2、库函数的使用方法 2.2.1、功能 2.2.2、头文件包含 2.2.3、实践 2.2.4、库函数文档的⼀般格式 …

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据&#xff0c;将后端得到的数据进行分页处理&#xff0c;通过pagehelper实现动态的分页查询&#xff0c;将查询页数和分页数通过前端发送到后端&#xff0c;后端使用pagehelper&#xff0c;底层是封装threadlocal得到页数和分页数并动态…

1.22ABM仿真(netlogo),A*(简要)

NETLOGO ABM建模 A* &#xff0c;体现了当前的步数成本 H为启发值&#xff0c;由启发性公式决定&#xff0c; 就是成本F由两个要素确定&#xff0c;一个是实际位置的成本G&#xff0c;由其自身固定的地理位置决定&#xff0c;另一个是启发值H&#xff0c;由下一个位置与目标…

web安全学习笔记【07】——非http\https抓包

#知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&flutter…

请求高级封装es7 async await语法支持

//定义请求根路径baseUrl const baseUrl"http://localhost:8080";/*** 返回请求根路径baseUrl*/ export const getBaseUrl()>{return baseUrl; }/*** 后端请求工具类* param {*} params */ export const requestUtil(params)>{return new Promise((resolve,rej…

【JaveWeb教程】(30)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(3)员工管理的实现

目录 SpringBootWeb案例033. 员工管理3.1 分页查询3.1.1 基础分页3.1.1.1 需求分析3.1.1.2 接口文档3.1.1.3 思路分析3.1.1.4 功能开发3.1.1.5 功能测试3.1.1.6 前后端联调 3.1.2 分页插件3.1.2.1 介绍3.1.2.2 代码实现3.1.2.3 测试 3.2 分页查询(带条件)3.2.1 需求3.2.2 思路分…

SQL 面试总结

1. SQL的运行顺序 from --> where -- > group by -- > having -- > select -- > order by -- > limit 2. SQL常用知识 select 筛选的字段名称 from 后面跟数据库名称 where 条件筛选 distinct - 去重 select distinct name, age select count(distinct n…

x-cmd pkg | haxor-news - Hacker News CLI

目录 简介首次用户功能特点进一步探索 简介 haxor-news 是一个用于在终端上查看 Hacker News 的内容。它可以让你在命令行查看/过滤 Hacker News 的帖子、评论、用户信息等&#xff0c;如过去 60 分钟内发布的最新评论。 Hacker News 是一家由 Paul Graham 创建的关于计算机黑…