vector 是一个具有相同类型的数据集合,元素按顺序排列。
数组 具有固定的大小,必须在编译时确定大小,因为数组存储在栈上。
vector 可以动态的调整大小,通过 adding
或 removing
元素。相当于动态长度的数组。
vector 数据存储在堆内存中,因此你需要自己处理 所有权
和 借用
。
let mut letters: Vec<char> = vec!['a', 'b', 'c'];
println!("letters are {:?}", letters); // letters are ['a', 'b', 'c']
let first_letter = letters[0];
println!("first_letter is {}", first_letter); // first_letter is a
向 vector 中添加数据:
letters.push('d');
letters.push('e');
letters.push('f');
println!("letters are {:?}", letters); // letters are ['a', 'b', 'c', 'd', 'e', 'f']
删除最后一个元素:
letters.pop();
println!("letters are {:?}", letters); // letters are ['a', 'b', 'c', 'd', 'e']
可变的 vector:
let mut numbers: Vec<i32> = vec![11, 22, 44];
numbers[2] = 33;
println!("numbers is {}", numbers[2]); // numbers is 33
获取长度:
let mut ints = vec![22, 33, 44, 55, 66, 77];
let length: usize = ints.len();
println!("length is {}", length); // length is 6
vector 切片:
let mut slice: &[i32] = &ints;
println!("slice is {:?}", slice); // slice is [22, 33, 44, 55, 66, 77]
slice = &ints[2..5];
println!("slice is {:?}", slice); // slice is [44, 55, 66]
基于 vector 的迭代:
for it in ints.iter() {
println!("it is {}", it);
}
// it is 22
// it is 33
// it is 44
// it is 55
// it is 66
// it is 77
在迭代中修改值:
for it in ints.iter_mut() {
// 使用取消引用指针 (*it) 以获取和修改值
*it *= *it;
}
println!("ints is {:?}", ints); // ints is [484, 1089, 1936, 3025, 4356, 5929]