doc: add vec and fix some errors in the rust (#48)

This commit is contained in:
fw_qaq 2022-11-11 17:25:02 +08:00 committed by GitHub
parent 7a22e7cda2
commit 2d4a9604cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -177,8 +177,8 @@ let p: Point = (41, 68);
```rust ```rust
let mut a: u32 = 8; let mut a: u32 = 8;
let b: u64 = 877; let b = 877_u64;
let c: i64 = 8999; let c = 8999i64;
let d = -90; let d = -90;
``` ```
@ -308,7 +308,7 @@ let S_string = a_string.to_string()
// 创建一个初始化的字符串对象 // 创建一个初始化的字符串对象
let lang = String::from("Rust"); let lang = String::from("Rust");
println!("First language is {lang}"); println!("First language is {lang}");
``` ```
### .capacity() ### .capacity()
@ -344,6 +344,91 @@ hi.push_str("How are you doing??");
println!("{hi}"); println!("{hi}");
``` ```
### 字符或字符串转换
1. 原生字符串,无需增加转义字符(`\`)转义
```rust
let str1 = r#"\hello"#;
println!("{}", str1);
// \hello
```
2. 字节和字节串
```rust
let str2 = b'a';
println!("{}", str2);
// 97
let str3 = b"\\hello";
println!("{:?}", str3);
//[92, 104, 101, 108, 108, 111]
let str4 = br#"\hello"#;
println!("{:?}", str4);
//[92, 104, 101, 108, 108, 111]
```
Rust 动态数组
-----------
### 创建动态数组
```rust
let v: Vec<i32> = Vec::new();
// 使用宏
let v1 = vec![1, 2, 3];
```
### 读取元素
```rust
let v = vec![1, 2, 3, 4, 5];
let element = &v[100];
// panic越界
let element2 = v.get(100);
println!("{:?}", element2);
//None
```
### 遍历数组
1. 只读取数组中的元素
```rust
let v = vec![1, 2, 3];
for i in &v {
println!("{}", i);
}
```
2. 遍历的同时修改数组中的元素
```rust
let mut v = vec![1, 2, 3];
for i in &mut v {
*i += 10
}
```
### 常用方法
<!--rehype:wrap-class=col-span-3-->
-|:-
-|:-
len() | 返回 vec 的长度
is_empty() | vec 是否为空
push(value) | 在 vec 尾部插入元素
pop() | 删除并返回 vec 尾部的元素,vec 为空则返回 None
insert(index,element) | 在指定索引处插入元素
remove(index) | 删除指定索引处的元素并返回被删除的元素,索引越界将 panic 报错退出
clear() | 清空 vec
append(vec) | 将另一个 vec 中的所有元素追加移入 vec 中,移动的 vec 变为空
truncate(len) | 将 vec 截断到指定长度,多余的元素被删除
retain(f) | 根据给定的函数,保留满足条件的元素
drain(range) | 删除 vec 中指定范围的元素,同时返回一个迭代该范围所有元素的迭代器
split_off(index) | 切分 vec索引左边的元素保留在原 vec 中(含索引),索引右边的元素(不含索引)在返回的 vec 中
Rust 运算符 Rust 运算符
----------- -----------
@ -396,7 +481,7 @@ let modulus: i32 = a % b; // => 4
运算符 | 描述 运算符 | 描述
:- | :- :- | :-
`g & h` | 二进制与 `g & h` | 二进制与
`g | h` | 二进制或 `g \| h` | 二进制或
`g ^ h` | 二进制异或 `g ^ h` | 二进制异或
`g ~ h` | 二进制补码 `g ~ h` | 二进制补码
`g << h` | 二进制左移 `g << h` | 二进制左移
@ -527,33 +612,32 @@ else {
```rust ```rust
let day_of_week = 2; let day_of_week = 2;
match day_of_week { match day_of_week {
1 => { 1 => {
println!("兄弟们今天是星期一"); println!("兄弟们今天是星期一");
}, },
2 => { 2 => {
println!("兄弟们今天是星期二"); println!("兄弟们今天是星期二");
}, },
3 => { 3 => {
println!("兄弟们今天是星期三"); println!("兄弟们今天是星期三");
}, },
4 => { 4 => {
println!("兄弟们今天是星期四"); println!("兄弟们今天是星期四");
}, },
5 => { 5 => {
println!("兄弟们今天是星期五"); println!("兄弟们今天是星期五");
}, },
6 => { 6 => {
println!("兄弟们今天是星期六"); println!("兄弟们今天是星期六");
}, },
7 => { 7 => {
println!("兄弟们今天是星期天"); println!("兄弟们今天是星期天");
}, },
_ => { _ => {
println!("默认!") println!("默认!")
} }
}; };
}
``` ```
### 嵌套...If 表达式 ### 嵌套...If 表达式
@ -778,7 +862,7 @@ println!("{mutable_borrowed_bar}");
这里借用的值使用 `&` 运算符从值一中借用值 这里借用的值使用 `&` 运算符从值一中借用值
### 取消引用 ### 引用
```rust ```rust
let mut borrow = 10; let mut borrow = 10;
@ -786,9 +870,9 @@ let deref = &mut borrow;
println!("{}", *deref); println!("{}", *deref);
``` ```
可以使用 `*` 操作符在 rust 中取消引用 `*` 操作符用于解引用
### 变量范围 ### 作用域
```rust ```rust
{ {
@ -798,7 +882,7 @@ println!("{}", *deref);
println!("{a_number}"); println!("{a_number}");
``` ```
这将产生错误,因为变量 `a_number`范围在大括号处结束 这将产生错误,因为变量 `a_number`生命周期在大括号处结束
另见 另见
-------- --------