10 2021 档案

摘要:use std::cmp::min; /** 821. Shortest Distance to a Character https://leetcode.com/problems/shortest-distance-to-a-character/ Given a string s and a ch 阅读全文
posted @ 2021-10-20 15:29 johnny_zhao 阅读(37) 评论(0) 推荐(0) 编辑
摘要:/** 1171. Remove Zero Sum Consecutive Nodes from Linked List https://leetcode.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list/ Given t 阅读全文
posted @ 2021-10-19 18:34 johnny_zhao 阅读(42) 评论(0) 推荐(0) 编辑
摘要:/** 190. Reverse Bits https://leetcode.com/problems/reverse-bits/ Reverse bits of a given 32 bits unsigned integer. Note that in some languages, such 阅读全文
posted @ 2021-10-17 11:09 johnny_zhao 阅读(40) 评论(0) 推荐(0) 编辑
摘要:一、Rust的内存管理 采用虚拟内存空间在栈和堆上分配内存,这是诸多编程语言通用的内存管理基石,Rust也是一样。然而,与c/c++语言不同的是,Rust不需要开发者显式地通过malloc/new或free/delete之类的函数去分配和回收堆内存。 栈内存的生命周期是短暂的,会随着栈展开(如函数调 阅读全文
posted @ 2021-10-16 18:18 johnny_zhao 阅读(1523) 评论(0) 推荐(0) 编辑
摘要:as_ref是什么? as_ref是转引用函数,将具有所有权对象转换成引用对象,在不改变被转换对象的基础上产生一个引用对象。 as_ref并不是所有类型都默认支持,很多时候都需要自已去声明。是AsRef trait的公共接口方法,只有那些实现了as_ref公共接口方法的类型才能使用as_ref,目前 阅读全文
posted @ 2021-10-12 23:36 johnny_zhao 阅读(3785) 评论(0) 推荐(0) 编辑
摘要:use std::borrow::Borrow; use std::cell::RefCell; use std::collections::HashMap; use std::ops::Index; use std::rc::Rc; /** 653. Two Sum IV - Input is a 阅读全文
posted @ 2021-10-12 10:54 johnny_zhao 阅读(31) 评论(0) 推荐(0) 编辑
摘要:我们很多时都使用像 println! 这样的宏,不过还没有完全探索什么是宏以及它是如何工作的。宏 (Macro) 指的是Rust中一系列的功能:使用 macro_rules! 的声明宏,和三种 过程(Procedural)宏: 自定义#[derive]宏在结构体和枚举上指定通过derive属性添加的 阅读全文
posted @ 2021-10-10 20:42 johnny_zhao 阅读(543) 评论(0) 推荐(0) 编辑
摘要:函数指针 我们之前学习过向函数传递闭包;也可以向函数传递常规函数。这在我们希望传递已经定义的函数而不是重新定义闭包作为参数时很有用。通过函数指针允许我们使用函数作为另一个函数的参数。函数的类型是 fn (使用小写的"f") 以免与 Fn 闭包trait相混淆。fn 被称为 函数指针(function 阅读全文
posted @ 2021-10-10 20:03 johnny_zhao 阅读(1062) 评论(0) 推荐(0) 编辑
摘要:Rust的类型系统还有一些其它功能。如 newtype 和 类型别名(type aliases),一个类型似newtype但有首稍微不同的语义的功能。还有 ! 类型和动态大小类型。 为了类型安全和抽象而使用newtype模式 newtype模式可以用于一些其它我们还没讨论的功能,包括静态的确保某值不 阅读全文
posted @ 2021-10-10 12:20 johnny_zhao 阅读(489) 评论(0) 推荐(0) 编辑
摘要:使用extern函数设用外部代码 有时我们的Rust代码可能需要与其它语言编写的代码交互。为此Rust有一个关键字,extern,有助于创建和使用 外部函数接口(Foreign Function Interface, FFI)。外部函数接口是一个编程语言用以定义函数的方式,其允许不同(外部)编程语言 阅读全文
posted @ 2021-10-09 23:46 johnny_zhao 阅读(1465) 评论(0) 推荐(0) 编辑
摘要:我们到目前为止讨论过的代码都有Rust在编译时会强制执行的内存安全保证。然而,Rust还隐藏有第二种语言 ,它不会强制执行这类内存安全保证:这被称为 不安全Rust (unsafe Rust)。它与常规Rust代码无异,但是会提供额外的超能力。 尽管代码可能没问题,但如果Rust编译器没有足够的信息 阅读全文
posted @ 2021-10-09 21:00 johnny_zhao 阅读(826) 评论(0) 推荐(0) 编辑
摘要:dyn是trait对象类型的前缀 dyn关键字用于强调相关trait的方法是动态分配的。要以这种方式使用trait,它必须是“对象安全”的。 与泛型参数或植入型特质不同,编译器不知道被传递的具体类型。也就是说,该类型已经被抹去。因此,一个dyn Trait引用包含两个指针。一个指针指向数据(例如,一 阅读全文
posted @ 2021-10-09 12:37 johnny_zhao 阅读(9762) 评论(0) 推荐(0) 编辑
摘要:Rust并没有继承,因为在 Rust 设计目标中,零成本抽象是非常重要的一条,它让 Rust 具备高级语言表达能力的同时,又不会带来性能损耗。因此我们通过其它方法来实现类似继承的功能。为了展示如何实现这一点,这里将创建一个图形用户接口(Graphical User Interface)工具的例子,它 阅读全文
posted @ 2021-10-08 12:30 johnny_zhao 阅读(446) 评论(0) 推荐(0) 编辑
摘要:对象包含数据和行为 The Gang of Four,它是面向对象编程模式的目录。它这样定义面向对象编程: 面向对象的程序是由对象组成。一个对象包含数据和操作这些数据的过程。这些过程通常被称为方法或操作。 在这个定义下,Rust是面向对象的:结构体和枚举包含数据而impl块提供了在结构本和枚举之上的 阅读全文
posted @ 2021-10-07 23:35 johnny_zhao 阅读(347) 评论(0) 推荐(0) 编辑
摘要:Rust的并发模型中一个有趣的方面是:语言本身对并发知之甚少。我们之前讨论的几乎所有内容,都属于标准库,而不是语言本身的内容。由于不需要语言提供并发相关的基础设施,并发方案不受标准库或语言所限:我们可以编写自已的或使用别人编写的并发功能。 然而有两个并发概念是内嵌于语言中的:std::marker 阅读全文
posted @ 2021-10-07 17:15 johnny_zhao 阅读(324) 评论(0) 推荐(0) 编辑
摘要:虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个。再一次思考一下Go编程语言文档中口号的这一部分:“不要通过共享内存来通讯” 通过共享内存通讯看起来如何?除此之外,为何消息传递的拥护者并不使用它并反其道而行之呢? 在某种程度上,任何编程语言中的通道都类似于单所有权的,因为一旦将一个值传送到通 阅读全文
posted @ 2021-10-07 01:04 johnny_zhao 阅读(572) 评论(0) 推荐(0) 编辑
摘要:一个日益流行的确保安全并发的方式是消息传递(message passing),这里线程或actor通过发送包含数据的消息来相互沟通。这个思想来源于Go编程语言文档中的口号:“不要通过共享内存来通讯;而是通过通讯来共享内存。” ("Do not communicate by sharing memor 阅读全文
posted @ 2021-10-04 18:15 johnny_zhao 阅读(867) 评论(0) 推荐(0) 编辑
摘要:在大部分现代操作系统中,已执行程序的代码在一个进程(process)中运行,操作系统则负责管理多个进程。在程序内部,也可以拥有多个同时运行的独立部分。运行这些独立部分的功能被程序为线程(threads)。 将程序中的计算拆分进多个线程可以改善性能,因为程序可以同时进行多个任务,不过这也会增加复杂性。 阅读全文
posted @ 2021-10-02 11:30 johnny_zhao 阅读(221) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示