- 博客(84)
- 收藏
- 关注
原创 rust学习笔记21-闭包
Rust 闭包通过以下机制实现强大功能: 灵活捕获环境:支持不可变/可变借用和所有权转移。 零成本抽象:编译时生成高效代码。 类型安全:通过 Fn、FnMut、FnOnce trait 保证行为正确性。
2025-03-30 11:58:58
422
原创 rust学习笔记20-Trait
Trait 在 Rust 中是非常强大的工具,用于定义共享行为、实现多态性以及提供灵活的接口设计。通过 Trait,你可以编写高度模块化和可复用的代码,同时保持静态类型系统的安全性和性能优势。无论是简单的接口定义还是复杂的泛型编程,Trait 都能提供所需的功能和支持。
2025-03-23 19:43:18
754
原创 rust学习笔记19-泛型
泛型是编写灵活且可重用代码的强大工具。它们使得你可以编写适用于多种类型的代码,而不需要重复自己。Rust 的泛型系统不仅强大而且非常高效,因为所有泛型代码都在编译时被具体化,确保运行时性能不会受到影响。通过合理地使用泛型,你可以创建出更加通用、类型安全的程序。
2025-03-22 22:43:05
445
原创 rust学习笔记18-迭代器
Rust 迭代器通过链式调用和惰性求值,提供了高效的声明式编程方式。掌握常用适配器和消耗器,能够编写简洁且高性能的代码。大力推荐使用。
2025-03-20 22:18:12
359
原创 rust学习笔记17-异常处理
总结,rust没有try/catch这样的异常处理机制,而是通过Result 和 Option这样枚举处理,unwrap 和 expect在开发调试过程中用比较多,自定义错误,校验类函数用的多。
2025-03-18 22:01:55
542
原创 rust学习笔记16-206.反转链表(递归)
用递归首先需要确定终止条件,在翻转链表中,终止条件就是cur为空,然后返回pre, 如果不为空先保存node.next(cur.next)到临时变量temp中,然后node.next=pre,最后递归直到为空返回。
2025-03-17 21:29:01
292
原创 rust学习笔记15-栈和队列
用栈模拟队列需用两个栈,一个负责进in,一个负责出out,重点在与出pop,先要判断out是否为空,为空就要把in栈全部出栈,推送给out,再由out送出。用队列模拟栈简单,只需要在pop时候,先获取队列最后一个值,返回并删除即可。
2025-03-16 20:24:53
561
原创 rust学习笔记13-18. 四数之和
两数之和与三数之和、四数之和解法不一样,主要是因为返回值,两数之和要返回下角标不能做排序,用hashmap合适,而三数之和、四数之和是要求返回结果集且不能重复,需要对数组进行排序,用双指针更适合。
2025-03-10 21:00:26
535
原创 rust学习笔记12-hashmap与1. 两数之和
rust集合中也有hashmap,昨天已经提到过,学过java同学再熟悉不过了,一道经典面试题问hashmap在java1.8的实现原理,数组+哈希表+红黑树,rust中hashmap在功能上和java一样,但实现上有很大差别,它的基本用法如下。同时,Rust 的类型系统在编译时就进行了严格的类型检查,避免了运行时的类型错误。总结rust使用HashMap判断key是否存在用的是引用类型&n,获取数值是*k,这点需要注意,如果不愿意使用*k,可以在Some(&k)也使用引用类型,这样就可以不用加*了。
2025-03-05 22:01:37
847
原创 rust学习笔记11-集合349. 两个数组的交集
rust除了结构体,还有集合类型,同样也很重要,常见的有数组(Array)、向量(Vector)、哈希表(HashMap) 和 集合(HashSet)字符串等,好意外呀,go没有HashMap、HashSet。HashSet 学过java的同学很熟悉,它一种不可重复切无序的集合,和HashMap相似 HashMap下一篇再讲, 本次我们用它来解决 两个数组的交集。总结,rust也有丰富的集合类型,本次只学习Vector和HashSet,后面再学其他的,集合很重要,需要重点掌握。
2025-03-04 21:20:41
441
原创 rust学习笔记10-智能指针与142.环形链表II
再上一篇我们已经接触过一个智能指针Box<T>,并且完成了翻转链表,但是Box 是一个独占所有权的智能指针,意味着不能创建环形链表,因为环形链表势必有2个节点同时指向一个区域,因此就要采用可以共享所有权的Rc<T>智能指针。本题主要关键点,一个是智能指针Rc<RefCell<T>> 组合使用,在一个处理返回值,这次用了Result枚举类型,还要一个就力扣不能提交本地测试(这个建议用AI生成测试用例,不必自己去写)
2025-03-02 20:49:45
529
原创 rust学习笔记9-结构体与206.反转链表
结构体是rust重要是数据结构,需要重点掌握,未来无论刷题还是做项目都会大量用到。再处理链表这类复杂的数据结构,特别是为空判断,可以使用Option枚举类型,来处理这种情况。
2025-03-02 11:52:39
800
1
原创 rust学习笔记8-枚举与模式匹配
switch 语法很经典,但在 Rust 中并不支持,很多语言摒弃 switch 的原因都是因为 switch 容易存在因忘记添加 break 而产生的串接运行问题,Java 和 C# 这类语言通过安全检查杜绝这种情况出现。总结一下,Rust的枚举类型非常灵活,能够表示多种不同的情况,每个变体可以携带不同类型和数量的数据。许多语言支持 null 的存在(C/C++、Java),这样很方便,但也制造了极大的问题,null 的发明者也承认这一点,"一个方便的想法造成累计 10 亿美元的损失"。
2025-03-01 14:09:22
489
原创 rust学习笔记7-344. 反转字符串
1.Rust 不支持i++ 和i--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力,但对于会其他语言如Java、Python的同学来讲,初期有点不适应。
2025-02-28 21:15:30
571
原创 rust学习笔记6-数组练习704. 二分查找
总结这道题是一道基础题,之前其他语言也做过,不难, 需要注意的一点nums.len()的返回值是usize类型需要先转换i32,然后在nums[middle as usize]在转换了,有人可能疑惑这不是多此一举,所有类型都是声明usize不就行了吗,答案是不行,因为提交leetcode会报数组越界问题。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 2 不存在 nums 中因此返回 -1。
2025-02-25 18:06:59
412
原创 rust学习笔记5-所有权机制
当声明一个变量时候,它就绑定了一个数据、scope以及一片内存区域,它就拥有一个所有权,并且它的所有权是可以出借(引用)的,变量不管是拥有还是引用,它都可以设置为可变和不可变,默认为不可变,拥有所有权的变量离开当前scope进入新scope时候,会调用Move(Copy)。rust所有权共享有两种一种是clone,另一种是copy,区别在于,clone是要求编写代码自己去调用,copy是在编译的时候,编译自己完成,不需要自己去调用。
2025-02-23 22:29:09
354
原创 rust学习笔记4-基础类型2和内存管理模型
与数组相比相同点:都是复合类型、长度都是固定的,不同点在于元组可以是不同类型的数据类型,数组必须同一类型的数据类型。数组不用过多介绍,但元组不是所有语言都有,目前我学的语言只有python,rust有这个类型。或传参会转移值的所有权,原变量将失效(编译器确保安全)。rust和其他语言一样除了基本的整型、浮点型、布尔、字符外也有复合类型、集合类型等复杂类型。2.以Java/Python/Go等于语言,采用gc管理:垃圾回收,虽然内存安全,值在任意时刻只能被一个变量拥有,所有者负责值的生命周期。
2025-02-23 19:04:48
243
原创 rust学习笔记2-rust的包管理工具Cargo使用
cargo-edit 是一个 Rust 语言的 Cargo 子命令扩展,它允许用户通过命令行轻松地管理 Cargo.toml 文件中的依赖项。这个工具提供了几个子命令,包括 cargo add、cargo rm、cargo upgrade 和 cargo set-version,使得添加、删除和更新依赖项变得更加简单和高效。cargo new --lib project_name 创建一个新的 Rust 库项目的。cargo build --release为生成优化的可执行文件,常用于生产环境。
2025-02-17 22:25:48
545
原创 rust学习笔记1-window安装开发环境
在 刚刚指定的cargo 安装目录(CARGO_HOME目录)新建 config 文件(没有更改安装路径的话就是在 C:\Users\Administrator\.cargo 这个目录)安装完成后回到命令行界面,选择安装类型,直接回车,表示默认安装。提高rust安装组件下载速度,也可以不配置,需要等待时间长一些,有概率因为网速等原因下载失败。3.双击运行 rustup-init.exe,如果电脑没有。(1)在指定路径新建.cargo和.rustup文件夹。(2)配置rustup下载源镜像。
2025-02-16 18:38:31
584
原创 Linux磁盘挂载,AI提示词一定要加“永久”二字
重启后,由于没有任务异常提示,便开始常规操作,直到拷贝大文件提示“No space left on device“,然后经过一系列的排查,发现之前挂载的磁盘不见了,然后上网查询发现磁盘挂载是临时的不是永久的,重启后需要重新挂载,好坑爹。最近公司服务器空间不足了,公司采购一批新的大容量硬盘4TB,要挂载到现有服务器上,这种事情不经常有,因此就去问AI大模型,我输入的提示词是 "挂载新硬盘" 注意没有加'永久',因为不清楚有临时/永久区分。这样,在系统重启后,磁盘会自动挂载到指定目录。
2025-02-14 10:38:09
425
原创 linux 释放9090端口
执行 systemctl stop cockpit.socket 关闭该服务。然后执行 systemctl list-sockets。发现是系统cockpit.service占用的该端口。因部署web服务,发现9090端口被系统占用。执行 sudo lsof -i :9090。
2025-02-13 11:45:44
299
原创 算法训练营day52,204. 计数质数
爱拉陶斯芬筛法,简称埃氏筛或爱氏筛。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7。
2024-05-10 22:04:25
460
1
原创 算法训练营day49(补), 单调栈1
/如果nums2[top]值是map的key找到了要的结果。//计算当前下标与栈顶值之差就是要的结果。//nums1值和下标做映射。//小于等于直接入栈。
2024-03-13 21:24:19
389
原创 算法训练营day48,动态规划16
/相差大于1看dp[i + 1][j - 1]是否为true,为true也是回文。// 如果j和i相同,字符串等a是回文,如果j和i之差等于1 ,字符串等aa也是回文。//不相等取左右两边最大值。//左右两边相等加2。
2024-03-11 22:27:46
499
原创 算法训练营day47,动态规划15
/当word1、word2字符串元素不相等,即可以删除word1的元素,也可以删除word2的元素,还可以两个数组元素都删除,因为求最少,所以取三者最小值。//当word1、word2字符串元素不相等,即可以删除或者添加word1的元素,还有替换元素,求最小值。//同样当word1为空需要删word2的全部元素长度为j。//同样当word1为空需要删word2的全部元素长度为j。//当word2为空需要删word1的全部元素长度为i。//当word2为空需要删word1的全部元素长度为i。
2024-03-10 19:41:32
328
原创 算法训练营day46,动态规划14
/本题与求最长公共子序列相似,区别在于,如果s是t的子序列,那么最长公共子序列的长度等于s的长度,否则s不是t的子序列。//如果s为空字符串,则至少有1种,因此初始化为1。
2024-03-10 13:47:56
515
原创 算法训练营day45(补),动态规划13
*本题与求最长重复子序列相似,不同之处在于不要求是连续的了,但要有相对顺序, 即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。因此text1[i-1]和 text2[j-1] 相同一样,直接+1,不相同则在dp[i][j-1]与dp[i-1][j]之间取最大值*/// 求最大子数组和就是让nums数组当前值和dp数组上一个值相加,在与nums数组当前比较,取最大值。//最大值初始值为数组第一个数,不能给0。//本质上还是求最长公共子序列。
2024-03-09 22:00:24
448
原创 算法训练营day43(补),动态规划11
/第K次买入后的利润。//第K次不持有的利润。//不持有的利润含有手续费。//买卖股票的最佳2的升级版。//买卖股票的最佳2的升级版。
2024-03-07 22:13:55
371
原创 算法训练营day40(补),动态规划8
for j := 0;j++ { // 遍历物品。for i := 1;i++ { // 遍历背包。w := s[j:i] //截取字符串。
2024-03-05 15:50:17
352
原创 算法训练营day39(补),动态规划7
当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。j++ { // 遍历背包。每次你可以爬至多m (1 <= m < n)个台阶。for i := 0;for i := 1;j++ { // 遍历背包。for j := 1;j++ { // 遍历背包。for i := 1;for i := 1;for i := 1;1 阶 + 1 阶 + 1 阶段。
2024-03-04 18:00:55
362
原创 算法训练营day38(补),动态规划6
/求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];问背包能背的物品最大价值是多少?
2024-02-29 23:02:13
567
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人