復合型別 Rust常用的復合資料型別

2021-10-14 17:50:10 字數 3856 閱讀 5441

1.陣列建立

一段連續空間中,儲存了同型別的資料。

fn main() ", arr1[0]);

println!("arr2[0]: {}", arr2[0]); //複習一下:因為拷貝時是複製語義,因此arr2還在

}

執行結果:

arr1[0]: 1

arr2[0]: 1

為啥這個陣列是複製語義,如果還不明白這個問題,需要回上一期看一下哈。

2.一些陣列的操作

fn main() ", arr1 < arr2);

}

執行結果:

true
上面是陣列的比較。

fn main() ", i);}}

執行結果:

012345

陣列的遍歷。

3.多維陣列

fn main() ", i);}}

執行結果:

[0, 0]

[0, 1]

[1, 0]

[1, 1]

這裡只講乙個程式:

fn main() ", str1);

let mut str2 = "rust"; //&str型別,因此並沒有所有權

push_str2(&mut str2);

println!("{}", str2);

}fn push_str1(str : &mut string)

fn push_str2(str : &mut str)

編譯出錯:

error[e0599]: no method named `push_str` found for type `&mut str` in the current scope

--> srcmain.rs:15:9

|15 | str.push_str("nb!");

| ^^^^^^^^ method not found in `&mut str`

就是說&mut str型別沒有push_str方法。

string是字串型別,可變長度。

&str型別只是借用,就算是&mut str,也只是對一塊字串的借用。沒有管理空間的權利。

fn main() ", str1);

let mut str2 = "rust"; //&str型別,因此並沒有所有權

// push_str2(&mut str2);

println!("{}", str2);

}fn push_str1(str : &mut string)

//fn push_str2(str : &mut str)

還有一點,rust的字串並不是char陣列。char是unicode編碼,string是utf-8編碼。

和c++不太一樣,有點像json?

1.結構體定義及初始化

struct point
逗號隔開。

struct point 

fn main() ;

println!("{}, {}", p1.x, p1.y);

}

執行結果:

2,2
rust還支援以下操作:

struct point 

fn default() -> point

}fn main() ;

let p2 = point;

let p3 = point;

let p4 = point;

println!("p1 at: ({}, {})", p1.x, p1.y);

println!("p2 at: ({}, {})", p2.x, p2.y);

println!("p3 at: ({}, {})", p3.x, p3.y);

println!("p4 at: ({}, {})", p4.x, p4.y);

}

執行結果:

p1 at: (2, 2)

p2 at: (0, 0)

p3 at: (1, 0)

p4 at: (0, 2)

非常滴方便!

結構體方法

struct circle 

impl circle

fn show()

fn area(&self) -> f32

}fn main() ;

println!("the radius: {}", circle.get_radius());

println!("the area: {}", circle.area());

circle::show(); //類似於靜態方法吧。這裡只能用類名進行呼叫

}

執行結果:

the radius: 2

the area: 12.56

i am a circle!

1.列舉的定義和使用列舉,其中資料之間的關係是「或」的關係。

兩種定義方式:

#[derive(debug)]

enum os_type

struct phone

enum phone2

enum num //可以是不同的資料型別

fn main() ; //類似於c語言的定義方式

let p3 = phone2::android_phone(string::from("huawei")); //rust推薦的定義方式

}

那麼我們怎麼使用enum,如何定義列舉方法呢,下面乙個例子做簡單說明

//列舉方法及match

impl num ", val),

num::float(val) => println!("float: {}", val)}}

}fn main()

執行結果:

int: 20

float: 3.14

可變長陣列:

常見操作示例如下:

fn main() ", v1[2]);

//但是不推薦上述方式

//推薦以下方式

match v1.get(2) ", value),

none => println!("index error")

}//不可變遍歷

for i in &v2 ", i);

}println!();

//可變遍歷

for i in &mut v2 ", i);}}

執行結果:

v1[2]: 3

v1[2]: 3

1 2 3 4

3 4 5 6

復合資料型別

復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...

復合資料型別

一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...

復合資料型別

結構體 作用 封裝資料 把多種不同的資料型別放在一起 注意 一般放在全域性 分號不能省略。結構體變數用點訪問 結構體指標用 訪問 初始化 靜態初始化 動態初始化 使用注意事項 給結構體中的陣列成員賦值時,不能直接將字串賦給陣列名,可以使用strcpy函式 給結構體中的指標變數成員賦值時,要先給指標分...