Vectors
向量(Vector)是可调整大小的数组。与切片(Slice)类似,它们的大小在编译时是未知的,但可以随时增长或缩小。向量由 3 个参数表示:
- 指向数据的指针
- 长度
- 容量
容量表示为向量预留的内存量。只要长度小于容量,向量就可以增长。当需要超过这个阈值时,向量会被重新分配更大的容量。
fn main() {
// 迭代器可以被收集到向量中
let collected_iterator: Vec<i32> = (0..10).collect();
println!("将 (0..10) 收集到:{:?}", collected_iterator);
// 可以使用 `vec!` 宏初始化向量
let mut xs = vec![1i32, 2, 3];
println!("初始向量:{:?}", xs);
// 在向量末尾插入新元素
println!("将 4 推入向量");
xs.push(4);
println!("向量:{:?}", xs);
// 错误!不可变向量无法增长
collected_iterator.push(0);
// 修复:^ 注释掉此行
// `len` 方法返回当前存储在向量中的元素数量
println!("向量长度:{}", xs.len());
// 使用方括号进行索引(索引从 0 开始)
println!("第二个元素:{}", xs[1]);
// `pop` 移除并返回向量的最后一个元素
println!("弹出最后一个元素:{:?}", xs.pop());
// 越界索引会导致 panic
println!("第四个元素:{}", xs[3]);
// 修复:^ 注释掉此行
// 可以轻松地遍历 `Vector`
println!("xs 的内容:");
for x in xs.iter() {
println!("> {}", x);
}
// 遍历 `Vector` 时,可以同时用一个单独的变量(`i`)
// 来枚举迭代计数
for (i, x) in xs.iter().enumerate() {
println!("在位置 {} 的值是 {}", i, x);
}
// 借助 `iter_mut`,可变的 `Vector` 也可以被遍历,
// 并且允许修改每个值
for x in xs.iter_mut() {
*x *= 3;
}
println!("更新后的向量:{:?}", xs);
}
更多 Vec 方法可以在 std::vec 模块中找到