From a1252b5c493b42e86a5372abe27dfdae19bada50 Mon Sep 17 00:00:00 2001 From: jaywcjlove Date: Fri, 11 Nov 2022 09:25:59 +0000 Subject: [PATCH] doc: add vec and fix some errors in the rust (#48) 2d4a9604cff93a06180047a3e31cd805f20dd2f6 --- docs/rust.html | 186 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 151 insertions(+), 35 deletions(-) diff --git a/docs/rust.html b/docs/rust.html index 8cb050cb..181deaf0 100644 --- a/docs/rust.html +++ b/docs/rust.html @@ -42,7 +42,7 @@

Rust 快速参考备忘单,旨在为编写基本语法和方法提供帮助。

入门

Hello_World.rs

fn main() {
   println!("Hello, World!");
@@ -245,8 +245,8 @@
 

整数

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

浮点数

@@ -350,6 +350,123 @@ // => Hey there...How are you doing?? println!("{hi}"); +

字符或字符串转换

+
    +
  1. +

    原生字符串,无需增加转义字符(\)转义

    +
    let str1 = r#"\hello"#;
    +println!("{}", str1);
    +// \hello
    +
    +
  2. +
  3. +

    字节和字节串

    +
    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]
    +
    +
  4. +
+

Rust 动态数组

+

创建动态数组

+
let v: Vec<i32> = Vec::new();
+// 使用宏
+let v1 = vec![1, 2, 3];
+
+

读取元素

+
let v = vec![1, 2, 3, 4, 5];
+
+let element = &v[100];
+// panic,越界
+let element2 = v.get(100);
+println!("{:?}", element2);
+//None
+
+

遍历数组

+
    +
  1. +

    只读取数组中的元素

    +
    let v = vec![1, 2, 3];
    +for i in &v {
    +    println!("{}", i);
    +}
    +
    +
  2. +
  3. +

    遍历的同时修改数组中的元素

    +
    let mut v = vec![1, 2, 3];
    +for i in &mut v {
    +    *i += 10
    +}
    +
    +
  4. +
+

常用方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-:-
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 运算符

比较运算符

@@ -468,7 +585,7 @@ -
运算符描述
g & h二进制与
`gh`
g ^ h二进制异或
g ~ h二进制补码
g << h二进制左移
g >> h二进制右移
+
运算符描述
g & h二进制与
g | h二进制或
g ^ h二进制异或
g ~ h二进制补码
g << h二进制左移
g >> h二进制右移

let (g, h) = (0x1, 0x2);
 let bitwise_and = g & h;  // => 0
@@ -602,33 +719,32 @@
 

匹配表达式

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 表达式

let nested_conditions = 89;
@@ -794,20 +910,20 @@
 println!("{mutable_borrowed_bar}");
 

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

-

取消引用

+

解引用

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

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

-

变量范围

+

* 操作符用于解引用

+

作用域

{
   // 范围仅限于此大括号
   let a_number = 1;
 }
 println!("{a_number}");
 
-

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

+

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

另见