在 Rust 中针对带有引用字段 struct 的深拷贝
在项目开发时,针对深拷贝的优化方案思考。 首先观察下面的 struct 结构体 #[derive(Default, Debug, Clone)] pub struct CompressedPostingListView<'a, TW> where TW: QuantizedWeight, { pub row_ids_compressed: &'a [...
在项目开发时,针对深拷贝的优化方案思考。 首先观察下面的 struct 结构体 #[derive(Default, Debug, Clone)] pub struct CompressedPostingListView<'a, TW> where TW: QuantizedWeight, { pub row_ids_compressed: &'a [...
理解项目中使用到的 dyn Iterator 让我们逐步解析你提到的几个问题: 1. 为什么返回值使用 Box 封装? 在 Rust 中,dyn Trait 表示动态分发的 trait 对象,而动态分发的 trait 对象本身无法直接作为函数的返回值,因为其大小在编译时不固定。 具体原因 Iterator 是一个 trait,dyn Iterator 是它的动态版本。 ...
结合生命周期标注,理解复杂场景下 clone、copy 的作用,内部原理细节 发现在使用了 Copy 这个 Trait 之后,原本会提示的 value moved,不再会报错了。 Copy 的作用类型和特点: 按值复制 不需要显式 clone 零成本复制(复制是按照位来进行的,开销很低,适合简单,轻量的类型(如数值类型与指针)) Copy 的使用条件: 类型中...
into_iter 是如何影响内存的
关于 Rust 的 Deref 的使用问题记录
Rust 的 Trait 需要符合 Object Safe 特性才能够使用 dyn 动态分发,否则可以尝试使用自定义的 enum,更进一步的可以使用 enum_dispatch 简化代码
当一个函数声明返回 impl Trait 时,它意味着函数将返回一个实现了 Trait 的某个具体类型,而这个具体类型对于用户是透明的。Rust 使用 impl Trait 来允许函数返回一个具体类型,但又不暴露这个类型的细节。
题目 原题 316. 去除重复字母 解题 题目中告知需要维持字典序并去除重复的字母,能够想到需要使用单调栈的思路,下面以 1 个具体例子分析问题: 给定字符串 s="cbacdcbc": 'c' 直接入栈,当前栈中字符串为 "c" 'b' 等待入栈,发现栈顶字符为 'c','c' > 'b' 并且 'b' 后面的这些字符中仍旧存在多个 'c' 字符,我们可以...
题目 原题 402. 移掉 K 位数字 解题 思考一下该使用什么样的策略去移除数字会让最终的数字尽可能的小:保证高位数字一定要尽可能的小,那么最终得到的数字就是最小的数字。本质上我们可以维护一个单调栈去实现这个策略。 注意事项 单调栈在维护的过程中,可能过早的消耗完 k 个可以被删除的字符,也可能没有完全消耗掉 k 个字符 针对 k 没有被全部消耗的情况,我们从后...
题目 原题 3175. 找到连续赢 K 场比赛的第一位玩家 解题 直接按照题目使用模拟的思路,会导致超时;对 k>skills.length() 的情况直接返回具有 maxSkill 的 index 能够解决这个模拟方法的超时问题。 下面分析一下题目中隐含的一些思路 如果 1 个 player 后面的 t 个 players 的 skill 值都比他低,那么这个...