📅  最后修改于: 2021-01-08 13:48:28             🧑  作者: Mango
向量是一个单一的数据结构,使您可以在内存中一个接一个地存储多个值。当我们具有物品清单(例如购物车中的物品)时,矢量很有用。
要点:
Vec
可以使用Vec :: new()函数创建向量。让我们来看一下:
Let v : Vec = Vec::new();
在上面的声明中,v是i32类型的向量,它是通过使用Vec :: new()函数的。
Rust提供了vec!宏来创建矢量并保存我们提供的值。
例如:
let v = vec![10,20,30,40,50];
在上面的声明中,使用向量宏(即vec!)创建向量v。对于vec!,Rust自动推断向量v的类型为Vec
注意:如果我们要重复向量的初始值,那么还有另一种实现vec!的方法:
let v = vec![2 ; i];
在上面的声明中,向量'v'是使用向量宏创建的,该向量包含2次'i'值。
可以使用下标运算符[]访问向量的特定元素。
让我们通过一个例子来理解:
fn main()
{
let v =vec![20,30,40,50];
println!("first element of a vector is :{}",v[0]);
println!("Second element of a vector is :{}",v[1]);
println!("Third element of a vector is :{}",v[2]);
println!("Fourth element of a vector is :{}",v[3]);
}
输出:
first element of a vector is :20
Second element of a vector is :30
Third element of a vector is :40
Fourth element of a vector is :50
让我们通过一个例子来理解:
fn value(n:Option<&i32>)
{
match n
{
Some(n)=>println!("Fourth element of a vector is {}",n),
None=>println!("None"),
}
}
fn main()
{
let v =vec![20,30,40,50];
let a: Option<&i32>=v.get(3);
value(a);
}
输出:
Fourth element of a vector is 50
在上面的示例中,使用get()方法访问向量的第四个元素。
当我们使用[]运算符访问不存在的元素时,那么它将导致程序崩溃。因此,当我们尝试访问不存在的元素时,程序崩溃了。如果我们尝试使用get()方法访问元素,则它将返回None且不会出现惊慌。
让我们通过一个例子来理解这一点:
fn value(n:Option<&i32>)
{
match n
{
Some(n)=>println!("Fourth element of a vector is {}",n),
None=>println!("None"),
}
}
fn main()
{
let v =vec![20,30,40,50];
let a: Option<&i32>=v.get(7);
value(a);
}
输出:
None
fn main()
{
let v =vec![20,30,40,50];
println!("{}",v[8]);
}
输出:
如果我们要访问向量的每个元素,则可以遍历向量的元素,而不是使用索引来访问向量的特定元素。
我们可以使用“ for”循环来遍历可变或不可变的引用。
让我们看一个不可变引用的简单示例:
fn main()
{
let v =vec![20,30,40,50];
print!("Elements of vector are :");
for i in v
{
print!("{} ",i);
}
}
输出:
Elements of vector are :20 30 40 50
让我们看一个简单的可变引用示例:
fn main()
{
let mut v =vec![20,30,40,50];
print!("Elements of vector are :");
for i in &mut v
{
*i+=20;
print!("{} ",i);
}
}
输出:
Elements of vector are :20 30 40 50
在上面的示例中,我们正在更改向量的值。因此,向量是可变参考。在'i'变量之前使用dereference(*)运算符来获取向量v的值。
创建矢量时,然后使用push()方法将元素插入矢量中。 push()将新元素插入向量的末尾。
让我们看一个简单的例子:
fn main()
{
let mut v=Vec::new();
v.push('j');
v.push('a');
v.push('v');
v.push('a');
for i in v
{
print!("{}",i);
}
}
输出:
java
在上面的示例中,push()函数用于在运行时将元素插入向量中。向量'v'是可变的,因此我们也可以更改向量的值。
当向量超出范围时,它将自动从内存中删除或释放。
让我们通过一个简单的场景来理解这一点:
fn main()
{
let v = !vec[30,40,50];
} => v is freed here as it goes out of the scope.
在上述情况下,向量超出范围将被释放,这意味着向量中存在的所有元素都将被删除。
向量可以存储相同类型的元素,这是向量的一个很大的缺点。枚举是一种自定义数据类型,其中包含相同枚举名称下的各种类型的变体。当我们想将元素存储在不同类型的向量中时,则使用枚举类型。
让我们通过一个例子来理解这一点:
#[derive(Debug)]
enum Values {
A(i32),
B(f64),
C(String),
}
fn main()
{
let v = vec![Values::A(5),
Values::B(10.7),Values::C(String::from("javaTpoint"))];
for i in v
{
println!("{:?}",i);
}
}
输出:
A(5)
B(10.7)
C(javaTpoint)