向量(
Vec<T>
)是 Rust 中最常用的集合型別之一,用於儲存同一型別的值列表。它們在處理檔行、購物車商品價格或其他需要有序儲存數據的場景中非常有用。
建立向量
您可以使用
Vec::new()
函式建立一個空向量,或者使用
vec!
宏建立一個包含初始值的向量:
fnmain() {
// 建立一個空向量,用於儲存 i32 型別的值
let v: Vec<i32> = Vec::new();
// 建立一個包含初始值的向量
let v = vec![1, 2, 3];
}
Rust 可以根據初始值推斷出向量的型別,因此通常不需要顯式型別註解。
更新向量
可以使用
push
方法將元素添加到向量末尾:
fnmain() {
letmut v = Vec::new();
v.push(5);
v.push(6);
v.push(7);
v.push(8);
}
請註意,為了修改向量,需要使用
mut
關鍵字將其聲明為可變的。
讀取向量元素
可以透過索引或
get
方法存取向量中的元素:
fnmain() {
let v = vec![1, 2, 3, 4, 5];
// 使用索引存取元素
let third: &i32 = &v[2];
println!("第三個元素是:{}", third);
// 使用 get 方法存取元素
let third: Option<&i32> = v.get(2);
match third {
Some(third) => println!("第三個元素是:{}", third),
None => println!("沒有第三個元素。"),
}
}
向量從 0 開始索引,因此索引
2
對應第三個元素。
get
方法返回一個
Option<&T>
,如果索引有效,則包含對元素的參照,否則為
None
。
處理無效索引
當使用索引存取向量元素時,如果索引超出範圍,程式會 panic。使用
get
方法可以避免 panic,因為它會返回
None
。
fnmain() {
let v = vec![1, 2, 3, 4, 5];
// 使用索引存取超出範圍的元素會導致 panic
let does_not_exist = &v[100];
// 使用 get 方法存取超出範圍的元素返回 None
let does_not_exist = v.get(100);
}
選擇使用哪種方法取決於您的程式邏輯,如果出現超出範圍的索引是不可接受的錯誤,則使用
[]
方法;如果超出範圍的索引是可能發生的正常情況,則使用
get
方法。
借用規則和向量
在對向量進行操作時,需要遵守 Rust 的借用規則。例如,如果持有對向量元素的不可變參照,則無法修改向量本身。
fnmain() {
letmut v = vec![1, 2, 3, 4, 5];
// 持有對第一個元素的不可變參照
let first = &v[0];
// 嘗試向向量添加元素會引起錯誤,因為 v 同時被借用了
v.push(6);
println!("第一個元素是:{}", first);
}
這是因為向量在記憶體中是連續儲存的,添加新元素可能會導致記憶體重新分配,從而使指向舊元素的參照失效。借用規則確保了程式的安全性和正確性。
叠代向量元素
可以使用
for
迴圈叠代向量中的元素:
fnmain() {
let v = vec![100, 32, 57];
// 叠代不可變參照
for i in &v {
println!("{i}");
}
// 叠代可變參照
letmut v = vec![100, 32, 57];
for i in &mut v {
*i += 50;
}
}
使用
&mut
可以獲取對元素的可變參照,並對元素進行修改。
使用列舉儲存不同型別
向量只能儲存同一型別的元素,但可以使用列舉來儲存不同型別的元素。
fnmain() {
enumSpreadsheetCell {
Int(i32),
Float(f64),
Text(String),
}
let row = vec![
SpreadsheetCell::Int(3),
SpreadsheetCell::Text(String::from("blue")),
SpreadsheetCell::Float(10.12),
];
}
列舉的每個變體都屬於同一個型別,因此可以將列舉儲存在向量中,從而間接儲存不同型別的元素。
向量銷毀
當向量超出作用域時,它會被銷毀,其包含的元素也會被銷毀。借用規則確保了在向量銷毀之前,不會有任何參照指向其元素。
fnmain() {
{
let v = vec![1, 2, 3, 4];
// 使用 v
} // v 超出作用域,被銷毀
}
總結
向量是 Rust 中非常強大的集合型別,它提供了多種方法來儲存、存取和修改數據。透過理解向量的工作原理以及 Rust 的借用規則,您可以有效地使用向量來構建各種數據結構和演算法。
擴充套件
除了本篇文章中介紹的內容之外,向量還提供了許多其他有用的方法,例如
pop
、
insert
、
remove
等。您可以在 Rust 官方文件中找到關於向量 API 的詳細介紹。
此外,您還可以學習其他集合型別,例如
String
、
HashMap
等,它們在不同的場景下都有獨特的優勢。
學習 Rust 集合型別是掌握 Rust 編程的關鍵,希望本文能幫助您更好地理解和使用向量。
文章精選
點 擊 關 註 並 掃 碼 添 加 進 交 流 群
領
取
「Rust
語
言
」
學
習
資
料