02-动态数组 vector
动态数组 vector — Rust By Example
译文 · 基于 Rust By Example
原文链接: https://doc.rust-lang.org/stable/rust-by-example/std/vec.html
动态数组 vector
vector 是大小可变的数组。和 slice(切片)类似,它们的大小在编译时是未知的,但它们可以随时扩大或缩小。一个 vector 使用 3 个词来表示:一个指向数据的指针,vector 的长度,还有它的容量。此容量指明了要为这个 vector 保留多少内存。vector 的长度只要小于该容量,就可以随意增长;当需要超过这个阈值时,会给 vector 重新分配一段更大的容量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| fn main() {
// 迭代器可以被收集到 vector 中
let collected_iterator: Vec<i32> = (0..10).collect();
println!("Collected (0..10) into: {:?}", collected_iterator);
// `vec!` 宏可用来初始化一个 vector
let mut xs = vec![1i32, 2, 3];
println!("Initial vector: {:?}", xs);
// 在 vector 的尾部插入一个新的元素
println!("Push 4 into the vector");
xs.push(4);
println!("Vector: {:?}", xs);
// 报错!不可变 vector 不可增长
collected_iterator.push(0);
// 改正 ^ 将此行注释掉
// `len` 方法获得一个 vector 的当前大小
println!("Vector size: {}", xs.len());
// 下标使用中括号表示(从 0 开始)
println!("Second element: {}", xs[1]);
// `pop` 移除 vector 的最后一个元素并将它返回
println!("Pop last element: {:?}", xs.pop());
// 超出下标范围将抛出一个 panic
println!("Fourth element: {}", xs[3]);
// 改正 ^ 注释掉此行
// 迭代一个 `Vector` 很容易
println!("Contents of xs:");
for x in xs.iter() {
println!("> {}", x);
}
// 可以在迭代 `Vector` 的同时,使用独立变量(`i`)来记录迭代次数
for (i, x) in xs.iter().enumerate() {
println!("In position {} we have value {}", i, x);
}
// 多亏了 `iter_mut`,可变的 `Vector` 在迭代的同时,其中每个值都能被修改
for x in xs.iter_mut() {
*x *= 3;
}
println!("Updated vector: {:?}", xs);
}
|
更多 Vec 方法可以在 std::vec 模块中找到。