09 2021 档案
摘要:内部可变性 (Interior mutability) 是Rust中的一个设计模式,它允许你即使在有不可变引用时也可以改变数据,这通常是借用规则不允许的。为了改变数据,该模式在数据结构中使用 unsafe 代码来模糊Rust通常的可变性和借用规则。 通过RefCell<T>在运行时检查借用规则 不同
阅读全文
摘要:对于智能指针模式来说第二个重要的trait是Drop,其允许我们在值要离开作用域时执行一些代码。可以为任何类型提供 Drop trait 的实现,同时所指定的代码被用于释放类似于文件或网络连接的资源。我们在智能指针上下文中讨论Drop是因为其功能几乎总是用于实现智能指针。例如,Box<T>自定义了D
阅读全文
摘要:实现 Deref trait 允许我们重载 解引用运算符 (dereference operator) * (与乘法运算符或通配符相区别)。通过这种方法实现Deref trait 的智能指针可以被当作常规引用来对待,可以编写操作引用的代码并用于智能指针。 通过解引用运算符追踪指针的值 常规引和是一个
阅读全文
摘要:栈(Stack)与堆(Heap) 在很多语言中,你并不需要经常考虑到栈与堆。不过在像 Rust 这样的系统编程语言中,值是位于栈上还是堆上在更大程度上影响了语言的行为以及为何必须做出这样的抉择。我们会在本章的稍后部分描述所有权与栈和堆相关的内容,所以这里只是一个用来预热的简要解释。 栈和堆都是代码在
阅读全文
摘要:最简单直接的智能指针是box,其类型是Box<T>。box允许你将一个值放在堆上而不是栈上。留在栈上的则是指向堆数据的指针。Rust中栈与堆的区别 除了数据被储存在堆上而不是栈上之外,box没有性能损失。不过也没有很多额外的功能。 使用Box<T>在堆上储存数据 在讨论Box<T>的用例之前,我们学
阅读全文
摘要:Rust的 闭包(closures) 是可以保存进变量或作为参数传递给其它函数的匿名函数。可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获调用者作用域中的值。我们将学习闭包的这些功能如何复用代码和自定义行为。 使用闭包创建行为的抽象 让我们试一个存储稍后要执行的闭包
阅读全文
摘要:Rust中的测试函数是用来验证非测试代码是否按照期望的方式运行的。测试函数体通常执行如下三种操作: 设置任何所需的数据或状态 运行需要测试的代码 断言其结果是我们所期望的 使用assert!宏来检查结果 assert!宏由标准库提供,在希望确保测试中一些条件为true时非常有用。需要向assert!
阅读全文
摘要:Rust中的每个引用都是有其 生命周期 (lifetimes),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型,也会出现引用的生命周期以一些不同方式相关联的情况,所以Rust需要我们使用泛型生命周期
阅读全文
摘要:在此也介绍常用的集合类型:哈希 map (hasp map)。 HashMap<K,V>类型储存了一个键类型K对应一个值类型V的映射。它通过一个哈希函数来实现映射,决定如何将键和值放入内存中。很多编程语言支持这种数据结构。 新建一个HashMap 可以使用new创建一个空的HashMap,并使用in
阅读全文
摘要:/** *This problem was asked by Uber. Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. Find the minimum e
阅读全文
摘要:import java.util.* /** * This problem was asked by Microsoft. * Print the nodes in a binary tree level-wise. For example, the following should print 1
阅读全文
摘要:传送门进入学习
阅读全文
摘要:package LeetCode_1087 /** * 1087.Brace-Expansion (prime) * https://leetcode.com/problems/brace-expansion/ * * A string S represents a list of words. E
阅读全文
摘要:package LeetCode_1680 /** * 1680. Concatenation of Consecutive Binary Numbers *https://leetcode.com/problems/concatenation-of-consecutive-binary-numbe
阅读全文
摘要:package LeetCode_241 import java.util.* import kotlin.collections.ArrayList /** * 241. Different Ways to Add Parentheses * https://leetcode.com/proble
阅读全文