type
status
date
slug
summary
tags
category
icon
password
box1.rs——智能指针
threads1.rs
- 线程返回值是如何得到的?
在 
handle.join().unwrap() 中,join() 方法会等待线程执行完成并获取线程的返回值,即每个线程的执行时间(以毫秒为单位),然后通过 unwrap() 方法将其取出并存储在 results 向量中。
- 线程编号和时间是如何输出的?
results.into_iter().enumerate(): into_iter() 方法将 results 向量转换为一个拥有所有权的迭代器,enumerate() 方法对迭代器进行索引迭代,返回一个元组 (index, value),其中 index 表示元素在迭代器中的索引,value 表示元素的值。threads3.rs——多个发送者
为什么这里需要克隆发送方?
- 因为thread使用了闭包关键字move,这会使得在创建第一个线程时,tx的所有权已经被移到了第一个线程里面,第二个线程还想用tx发送信息自然是做不到的
- 因此克隆一个tx,第二个线程就可以使用了
macros3.rs
- 使用macro_rules!来定义宏
- 宏的定义必须在调用之前
- 通过在 my_macro宏定义前加上#[macro_export]属性,使得宏可以在模块外部使用
macros4.rs
模式匹配:
- $()中包含的是模式- $x:expr,该模式中的- expr表示会匹配任何 Rust 表达式,并给予该模式一个名称- $x
- 因此 $x模式可以跟整数1进行匹配,也可以跟字符串 "hello" 进行匹配:vec!["hello", "world"]
- $()之后的逗号,意味着- 1和- 2之间可以使用逗号进行分割,也意味着- 3既可以没有逗号,也可以有逗号:- vec![1, 2, 3,]
- *说明之前的模式可以出现零次也可以任意次,这里出现了三次
匹配一次:
匹配多次:
tests5.rs——裸指针和unsafe
- 在裸指针 *const T中,这里的*只是类型名称的一部分,并没有解引用的含义
- 下面的代码基于值的引用同时创建了可变和不可变的裸指针,创建裸指针是安全的行为,而解引用裸指针才是不安全的行为 :
algorithm1——合并链表
algorithm2——链表反转
- 因为用到了clone,因此必须限定T是具有Clone特征的泛型
- 方法一
- 使用std::mem::replace(self, reversed_list);交换新链表和self的所有权
- 方法二
- 直接将新链表的所有权交给self
- 其中while循环那段可以这样改:
algorithm4——二叉查找树
- 因为要递归实现插入和查找,所以应该将search和insert实现为TreeNode的方法,所以TreeNode方法的实现应该要写在最前面
- 二叉树节点的方法:
- Author:orangec
- URL:orange’s blog | welcome to my blog (clovy.top)/4f40a64607384419bece8a34963191e6
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!