Skip to content

Commit

Permalink
doc: add vec and fix some errors in the rust (jaywcjlove#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
fwqaaq authored Nov 11, 2022
1 parent 7a22e7c commit 2d4a960
Showing 1 changed file with 119 additions and 35 deletions.
154 changes: 119 additions & 35 deletions docs/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,8 @@ let p: Point = (41, 68);

```rust
let mut a: u32 = 8;
let b: u64 = 877;
let c: i64 = 8999;
let b = 877_u64;
let c = 8999i64;
let d = -90;
```

Expand Down Expand Up @@ -308,7 +308,7 @@ let S_string = a_string.to_string()
// 创建一个初始化的字符串对象
let lang = String::from("Rust");
println!("First language is {lang}");
```
```

### .capacity()

Expand Down Expand Up @@ -344,6 +344,91 @@ hi.push_str("How are you doing??");
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 运算符
-----------

Expand Down Expand Up @@ -396,7 +481,7 @@ let modulus: i32 = a % b; // => 4
运算符 | 描述
:- | :-
`g & h` | 二进制与
`g | h` | 二进制或
`g \| h` | 二进制或
`g ^ h` | 二进制异或
`g ~ h` | 二进制补码
`g << h` | 二进制左移
Expand Down Expand Up @@ -527,33 +612,32 @@ else {

```rust
let day_of_week = 2;
match day_of_week {
1 => {
println!("兄弟们今天是星期一");
},
2 => {
println!("兄弟们今天是星期二");
},
3 => {
println!("兄弟们今天是星期三");
},
4 => {
println!("兄弟们今天是星期四");
},
5 => {
println!("兄弟们今天是星期五");
},
6 => {
println!("兄弟们今天是星期六");
},
7 => {
println!("兄弟们今天是星期天");
},
_ => {
println!("默认!")
}
};
}
match day_of_week {
1 => {
println!("兄弟们今天是星期一");
},
2 => {
println!("兄弟们今天是星期二");
},
3 => {
println!("兄弟们今天是星期三");
},
4 => {
println!("兄弟们今天是星期四");
},
5 => {
println!("兄弟们今天是星期五");
},
6 => {
println!("兄弟们今天是星期六");
},
7 => {
println!("兄弟们今天是星期天");
},
_ => {
println!("默认!")
}
};
```

### 嵌套...If 表达式
Expand Down Expand Up @@ -778,17 +862,17 @@ println!("{mutable_borrowed_bar}");

这里借用的值使用 `&` 运算符从值一中借用值

### 取消引用
### 解引用

```rust
let mut borrow = 10;
let deref = &mut borrow;
println!("{}", *deref);
```

可以使用 `*` 操作符在 rust 中取消引用
`*` 操作符用于解引用

### 变量范围
### 作用域

```rust
{
Expand All @@ -798,7 +882,7 @@ println!("{}", *deref);
println!("{a_number}");
```

这将产生错误,因为变量 `a_number` 的范围在大括号处结束
这将产生错误,因为变量 `a_number` 的生命周期在大括号处结束

另见
--------
Expand Down

0 comments on commit 2d4a960

Please sign in to comment.