Rust - 向量(Vectors)

Rust - 向量(Vectors) 首页 / Rust入门教程 / Rust - 向量(Vectors)

向量是单个数据结构,使您可以在存储器中存储多个值。

要点:

  • 向量用于存储相同类型的值。
  • 向量由Vec <T>表示。
  • Vec <T>由标准库提供,该库可以保存任何类型的数据,其中T确定向量的类型。
  • 向量的数据分配在堆上。
  • 向量是可增长的数组,意味着可以在运行时添加新元素。

Vec<T>: 当向量拥有特定类型时,则将其显示在尖括号中。

创建向量

可以使用Vec ::new()函数来创建向量。让我们来看看:

Let v : Vec<i32> = Vec::new();

在上面的声明中,v是i32类型的向量,它是使用Vec ::new()函数创建的。Rust提供了vec!宏来创建矢量并保存我们提供的值。

例如:

let v = vec![10,20,30,40,50]; 

在上面的声明中,向量v是使用向量宏(即vec!)创建的。对于vec!,Rust自动推断向量v的类型为Vec <i32>,因为向量宏包含整数值。

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
  • 访问向量元素的第二种方法是使用get(index)方法,将向量的索引作为参数传递,并返回Option <&t>类型的值。

让我们通过一个例子来了解:

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且不会出现惊慌。

无涯教程网

让我们通过一个例子来理解这一点:

  • get(index)
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("learnfk"))];
     for i in v
    {
	   println!("{:?}",i);
     }
}

输出:

A(5)
B(10.7)
C(learnfk)

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出区块链 -〔陈浩〕

趣谈网络协议 -〔刘超〕

程序员进阶攻略 -〔胡峰〕

趣谈Linux操作系统 -〔刘超〕

高并发系统设计40问 -〔唐扬〕

Flink核心技术与实战 -〔张利兵〕

容器实战高手课 -〔李程远〕

数据分析思维课 -〔郭炜〕

深入拆解消息队列47讲 -〔许文强〕

好记忆不如烂笔头。留下您的足迹吧 :)