Rust Vec

Rust Vec 初始化方法

Vec(動態(tài)數(shù)組)是 Rust 中最常用的集合類型。以下是各種初始化方法:

基本初始化

// 創(chuàng)建空 Vec
let mut vec1: Vec<i32> = Vec::new();
let mut vec2 = Vec::<i32>::new();

// 使用 vec! 宏
let vec3 = vec![1, 2, 3, 4, 5];
let vec4 = vec![0; 5];  // [0, 0, 0, 0, 0]

指定容量

// 預分配容量,避免重復分配
let mut vec5 = Vec::with_capacity(10);

// 檢查容量和長度
println!("容量: {}, 長度: {}", vec5.capacity(), vec5.len());

從其他集合創(chuàng)建

// 從數(shù)組
let arr = [1, 2, 3, 4];
let vec6 = arr.to_vec();
let vec7 = Vec::from(arr);

// 從切片
let slice = &[1, 2, 3];
let vec8 = slice.to_vec();

// 從迭代器
let vec9: Vec<i32> = (1..=5).collect();
let vec10 = vec![1, 2, 3].into_iter().map(|x| x * 2).collect::<Vec<i32>>();

特殊初始化

// 使用默認值填充
let vec11 = vec![String::new(); 3];  // 3個空字符串

// 使用閉包初始化
let vec12: Vec<i32> = (0..5).map(|i| i * i).collect();

// 復制現(xiàn)有 Vec
let original = vec![1, 2, 3];
let vec13 = original.clone();

不同數(shù)據(jù)類型

// 字符串 Vec
let strings = vec!["hello", "world"];
let owned_strings = vec![String::from("hello"), String::from("world")];

// 元組 Vec
let tuples = vec![(1, "a"), (2, "b"), (3, "c")];

// 結(jié)構(gòu)體 Vec
#[derive(Clone)]
struct Person { name: String, age: u32 }

let people = vec![
    Person { name: "Alice".to_string(), age: 30 },
    Person { name: "Bob".to_string(), age: 25 },
];

性能提示

  • 使用 with_capacity() 預分配已知大小
  • vec! 宏在編譯時優(yōu)化
  • collect() 適用于函數(shù)式編程風格

1. Vec 基礎(chǔ)

Vec<T> 是 Rust 標準庫中最常用的可增長數(shù)組類型,存儲在堆上,元素類型為 T。

let mut v: Vec<i32> = Vec::new(); // 創(chuàng)建空 Vec
let v2 = vec![1, 2, 3];           // 使用宏創(chuàng)建

2. 常用操作

添加元素

let mut v = Vec::new();
v.push(10);
v.push(20);

訪問元素

let v = vec![1, 2, 3];
println!("{}", v[0]);           // 直接索引(可能 panic)
println!("{:?}", v.get(1));     // get 方法,返回 Option<&T>

遍歷

let v = vec![1, 2, 3];
for x in &v {
    println!("{}", x);          // 不可變借用
}
for x in &mut v {
    *x += 1;                    // 可變借用
}
for x in v {
    println!("{}", x);          // 獲取所有權(quán),v 被消費
}

3. 其他常用方法

let mut v = vec![1, 2, 3];
v.pop();                        // 移除并返回最后一個元素
v.insert(1, 99);                // 在指定位置插入
v.remove(0);                    // 移除指定位置元素
v.clear();                      // 清空所有元素
v.len();                        // 獲取長度
v.is_empty();                   // 是否為空
v.contains(&99);                // 是否包含某值

4. 批量操作

let v = vec![1, 2, 3];
let v2: Vec<_> = v.iter().map(|x| x * 2).collect(); // 映射
let v3: Vec<_> = v.iter().filter(|&&x| x > 1).collect(); // 過濾

5. 與切片的關(guān)系

let v = vec![1, 2, 3];
let slice: &[i32] = &v[1..]; // Vec 可以轉(zhuǎn)換為切片

6. 性能和容量

let mut v = Vec::with_capacity(100); // 預分配容量
v.reserve(50);                       // 追加預留
v.shrink_to_fit();                   // 縮減容量

7. 多類型 Vec

enum Value { Int(i32), Text(String) }
let v: Vec<Value> = vec![Value::Int(1), Value::Text("hi".to_string())];

8. 常見錯誤

  • 越界訪問會 panic
  • 獲取所有權(quán)后原 Vec 不能再用

9. 實用場景

  • 動態(tài)收集數(shù)據(jù)
  • 批量處理
  • 作為函數(shù)參數(shù)或返回值

總結(jié)

Vec 是 Rust 最常用的動態(tài)數(shù)組類型,支持高效的插入、刪除、遍歷和批量操作,適合絕大多數(shù)需要動態(tài)存儲數(shù)據(jù)的場景。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容