Rust 第11节 Vector
原型:
Vec<T>
由标准库提供;
由多个类型一致的值组成;
在内存中连续存放
1、创建
创建Vector
- 1)使用函数
Vec::new();
let mut v : Vec<i32> = Vec::new(); //创建一个空Vector
- 2)使用宏直接创建
let mut v2 = vec![11,22,33,44];
2、向Vec中添加数据
//向Vector中添加新元素
v.push(12);
v2.push(121);
//当vector离开它的作用域后,他会被清理掉,它内部的元素都会被清理掉
3、获取Vec中的数据
- 1、索引法
let m = v[0]; //当数组越界时,程序在运行时会panick
- 2、get方法
get()方法 返回的类型为 option
let x = v2.get(2);//x为一个option类型
match x {
Some(data) => println!("data is {}",data),
None => println!("error"), //当数组越界时,程序会走到这里,程序不会崩溃
}
if let Some(buff) = v2.get(0) {
println!("some is {}",buff);
}
4、引用问题
可变引用和不可变引用的规则同样适用vector,需要注意
下列代码会报错,不能同时存在一个可变引用和一个不可变引用;
let mut vx = vec![1,2,3,4];
let tmp = &vx[0]; // 不可变引用
vx.push(12); //可变引用,该行会报错;同时存在了可变引用和不可变引用
println!("vx[0] = {}",tmp); //不可变引用
//为何往vector最后增加数据,会影响vector0的引用呢: vector是连续的存储;如果在push时,空间不够,
//那么就会在内存中找一块大的内存放置数据;原来的内存空间就失效了;那么使用索引获取数据那行就会出现问题;
5、遍历
//遍历 vector
let s1 = vec![1,2,3,4,5,6,7];
for i in &s1 { //使用它的不可比变引用
print!(" {}",i);
}
//使用可变引用,遍历并改变数据
let mut s2 = vec![1,2,3,4,5,6,7];
for i in & mut s2 {
*i += 100;//这里要解引用...
}
for i in &s2 {
println!(" {}",i);
}