在Rust编程语言中,Vec
是一个可增长的可变数组,用于存储一系列元素。它属于Rust标准库提供的集合类型之一。Vec
是泛型的,这意味着它可以存储任何类型的数据。
Vec
通过宏 vec!
进行初始化,这个宏允许你轻松地创建一个包含初始元素的向量。使用 vec!
宏时,你可以在宏调用中直接指定初始元素。
下面是 Vec
和 vec!
宏的基本用法示例:
fn main() {
// 使用vec!宏创建一个包含初始元素的Vec
let v: Vec<i32> = vec![1, 2, 3, 4, 5];
// Vec的长度
println!("The length of the vector is: {}", v.len());
// 访问Vec中的元素
println!("The first element is: {}", v[0]);
println!("The second element is: {}", v[1]);
// 遍历Vec中的元素
for i in &v {
println!("{}", i);
}
// 可变的Vec,可以更改其元素
let mut m = vec![1, 2, 3];
m.push(4);
m.push(5);
println!("The modified vector is: {:?}", m);
}
在这个例子中:
-
vec![1, 2, 3, 4, 5];
使用vec!
宏创建了一个包含5个i32
类型元素的Vec
。 -
v.len()
获取Vec
的长度。 -
v[0]
和v[1]
通过索引访问Vec
中的元素。 - 使用
for
循环遍历Vec
中的元素。 -
mut
关键字用于声明一个可变的Vec
,然后使用push
方法向Vec
添加新元素。
使用Vec
和vec!
宏时,需要记住的是: -
Vec
在内存中是连续存储的。 -
Vec
可以通过push
方法添加元素,通过pop
方法移除元素。 -
Vec
的索引访问是快速的,但添加或删除元素可能会涉及重新分配内存和复制数据。 - 当使用索引访问
Vec
时,需要确保索引是有效的,否则程序将会 panic。
Vec
的切片
fn main() {
let vec = vec![1, 2, 3, 4, 5];
let slice_of_vec = &vec[1..4]; // 包含索引1,不包含索引4
println!("Vec 切片: {:?}", slice_of_vec);
}