[易学易懂系列|rustlang语言|零基础|快速入门|(10)]
有意思的基础知识
Vectors
我们之前知道array数组是定长,只可我保存相同类型的数据的数据类型。
如果,我们想用不定长的数组呢?因为很多时候,数据有可能是或多或少,不确定个数的。
这时候,vector就出场了。
在Rust,vecotr是可变长度的数组,用于保存相同类型的数据。
vector是引用类型,其数据也是动态地在堆heap分配内存空间。
我们知道String类型,是引用类型。
其实,String底层,也就是用vector来保存字符串的数据的。
一般来说,vector在Rust里有三个主要部分:
1.指向数据(堆heap内存)的地址指针
2.当前成员数据的长度( length )。
3.容量( Capacity )。
vecotr定义的格式为:
Vec
我们来看看示例代码:
构建一个空的vector
let mut a = Vec::new(); //1.With new() keyword
let mut b = vec![]; //2.Using the vec! macro
我们看到rust有两种构建vector的方法:
1.用new()关键词
2.用宏vec!(什么是宏,我们以后会讲到)
构建一个包含类型的vector:
let mut a2: Vec<i32> = Vec::new();
let mut b2: Vec<i32> = vec![];
let mut b3 = vec![1i32, 2, 3];//Sufixing 1st value with data type
let mut b4 = vec![1, 2, 3];
let mut b5: Vec<i32> = vec![1, 2, 3];
let mut b6 = vec![1i32, 2, 3];
let mut b7 = vec![0; 10]; //Ten zeroes
访问并更新数据:
//Accessing and changing existing data
let mut c = vec![5, 4, 3, 2, 1];
c[0] = 1;
c[1] = 2;
//c[6] = 2; Cannot assign values this way, index out of bounds
println!("{:?}", c); //[1, 2, 3, 2, 1]
//push and pop
let mut d: Vec<i32> = Vec::new();
d.push(1); //[1] : Add an element to the end
d.push(2); //[1, 2]
d.pop(); //[1] : : Remove an element from the end
//