Skip to content

动态数组 Vector

就像它的名字一样:动态数组

以下是元组、数组、动态数组的对照表:

特性元组 (Tuple)数组 (Array)动态数组 (Vector)
长度固定(编译时确定)固定(编译时确定)动态(运行时可变)
内存分配栈(可能包含堆数据)
元素类型异构(允许不同类型)同构(必须相同类型)同构(必须相同类型)
访问方式.0 .1(直接索引)[0] [1](索引访问)[0]get(0)
越界检查无(直接访问)运行时 panic(若越界)运行时 panic 或返回 None
性能最高(无额外开销)高(栈分配)较低(堆分配+动态管理)
常用场景临时组合少量异构数据固定长度的简单数据集需要动态增删的数据集合

panic:程序遇到错误后直接终止并提供反馈(俗称崩溃)

创建方式

Vec::new

rust
let v: Vec<i32> = Vec::new();  // 因为编译器没有得到任何关于类型的暗示信息,所以要显式地声明了类型 Vec<i32>,

当你向里面增加一个元素后,一切又不同了:

rust
let mut v = Vec::new();  // mut 表示可变
v.push(1);               //使用push向v中添加元素

如果预先知道要存储的元素个数,可以使用 Vec::with_capacity(capacity) 创建动态数组,这样可以避免因为插入大量新数据导致频繁的内存分配和拷贝,提升性能

vec!宏

rust
let v = vec![1, 2, 3];

vec!宏会自动推导出 Vec 的类型,因此不需要显式指定类型。 适合场景:初始化一个已经包含多个元素的动态数组。

后续

https://course.rs/basic/collections/vector.html#更新-vector

.iter 遍历器 .iter.next