Rust中Vector
用来存放多个值
定义
Rust 中 Vec<T>
叫做 vector
,由标准库提供,有如下特点:
-
可以存放多个值
-
T
表示泛型,所有值的类型相同
-
值在内存中连续存放
-
创建:
- 使用
Vec::new()
创建空 vector,示例:
// 需要指定类型
let v: Vec<i32> = Vec::new();
// 自动推导 v 为 i32 类型
let v = vec![1, 2, 3];
// 声明可变 vector,Vec<i32> 也可以不写,自动推导
let mut v: Vec<i32> = Vec::new();
// push 添加元素
v.push(1);
v.push(2);
v.push(3);
// 读元素:索引和get方法
let two: &i32 = &v[1]; // 索引2,可能panioc: index out of bounds
match v.get(1) { // get 获取索引为2的元素,索引越界返回 None
Some(two) => println!("{}", two),
None => println!("none"),
}
// for 遍历
for i in &v {
println!("{}", i);
}
- 声明周期:Vector 在离开作用域后,vector和里面的元素会被自动清理
- 所有权和借用规则
- 不能在同一作用域内同时拥有可变和不可变引用
- 因为 vector 在内存中连续存放,变化时,需要重新分配内存空间,导致原来的指针失效
示例
使用 enum 存放多种类型数据:
- enum 的变体可以附加不同类型的数据
- enum 的变体定义在同一个 enum 类型下
#[derive(Debug)]
enum SheetCell {
Int(i32),
Float(f64),
Text(String),
}
fn main() {
let row = vec![
SheetCell::Int(1),
SheetCell::Float(3.14),
SheetCell::Text(String::from("hello")),
];
for i in row {
println!("{:?}", i)
}
}