Rust 中的向量:动态数组的完整指南

Vector 介绍

Vector(向量) 是 Rust 中的一个模块,它为我们提供了存储值的容器空间。它是一个连续的可变大小数组类型,其内容存储在堆内存上。我们用 Vec 来表示它。在 Rust 中,Vector 具有 O(1) 的索引访问复杂度,且在向量上进行 push(推入)和 pop(弹出)操作的复杂度也是 O(1)。此外,Vector 保证了其分配的字节数永远不会超过 isize::MAX

通俗地说,我们可以把 Vector 看作一个类似于数组的容器,但它比普通的数据结构拥有更多的优势。它可以在运行时动态地增加大小。它由标准库提供,可以存储任何数据类型的值。Vector 的数据分配在堆上。它的 长度(length) 定义了 Vector 中当前存在的元素数量。而它的 容量(capacity) 定义了该 Vector 在堆上实际分配的空间,通常以 2^n 的形式存在。

语法:

Vec

其中 T 表示数据的类型。

在 Rust 中创建 Vector

要创建 Vector,我们可以简单地遵循以下列出的方法。

1. 使用 Vec::new() 方法:

let v : Vec = Vec::new();

这里 v 是一个已初始化的向量,它将包含 64 位整数数据类型。它是在 Vec::new() 方法 的帮助下进行初始化的。

fn main() {

    let v : Vec = Vec::new();  

    // 打印 vector 的大小 
    println!("{}",v.len());
}

输出:

!image

2. 使用 Rust 中的宏:

let v = vec![‘G‘,‘E‘,‘E‘,‘K‘,‘S‘];

这里使用的是宏 vec! 创建的 Vector。它存储了我们在这里提供的字符类型的值。

fn main() {

    let v = vec![‘G‘,‘E‘,‘E‘,‘K‘,‘S‘]; 

    // 打印 vector 的大小 
    println!("{}",v.len());
}

输出:

!image

访问 Vector

以下列出的方法可用于在 Rust 编程中访问 Vector。

1. 使用下标运算符:

类似于其他语言中的索引概念,我们可以使用下标运算符通过索引直接访问 Vector 中的值。需要注意的是,索引从 0 开始。

let v = vec![‘G‘,‘E‘,‘E‘,‘K;‘,‘S‘];

// 这里的 index 是一个非负整数值,且小于 vector 的大小。 
char ch = v [ index ];

示例:

fn main() {

    let v = vec![‘G‘,‘E‘,‘E‘,‘K‘,‘S‘];

    // 这里的 index 是一个非负整数值,且小于 vector 的大小
    let index: usize = 3;

    // 获取给定索引处的值
    let ch: char = v[index];

    print!("{}
",ch);
}

输出:

!image

2. 使用 get() 方法

访问 Vector 元素的第二种方法是使用 INLINECODEcdb76397 方法,并将 Vector 的索引作为参数传递。它返回 INLINECODEfb030894 类型的值。

let v = vec![‘G‘,‘E‘,‘E‘,‘K;‘,‘S‘];

// 这里的 index 是一个非负整数值,且小于 vector 的大小。 
let value: Option = v.get(index);

示例:

// 打印 get 值的方法
fn value(n:Option)  
{  
    match n  
    {  
        Some(n)=>println!("Element of vector {}",n),  
        None=>println!("None"),  
    }  
}

fn main() {

    let v = vec![‘G‘,‘E‘,‘E‘,‘K‘,‘S‘];

    // 这里的 index 是一个非负整数值,且小于 vector 的大小
    let index: usize = 3;

    // 获取给定索引处的值
    let ch: Option = v.get(index); 
    value(ch);
}

输出:

!image

3. 遍历 Vector:

为了访问 Vector,我们也可以像在其他编程语言中那样遍历它。我们可以使用 for 循环 来遍历 Vector。

let v = vec![‘G‘,‘E‘,‘E‘,‘K;‘,‘S‘];

print!("Vector elements :");  

for i in v  
{  
  // 在 vector 上遍历 i
  print!("{} ",i);  
}

示例:

fn main() {

    let v = vec![‘G‘,‘E‘,‘E‘,‘K‘,‘S‘];

    print!("Vector elements : ");  

    // 循环遍历 vector 中的元素
    for i in v  
    {  
        // 在 vector 上遍历 i
        print!("{} ",i);  
    }  
    print!("
",);
}

输出:

!image

更新 Vector

创建 Vector 后,我们可以使用 push() 方法来更新它。如果 Vector 的大小小于其容量,它会推入新元素;如果 Vector 的大小大于其容量,它将分配两倍于 Vector 大小的空间,然后将所有元素复制到新

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/44762.html
点赞
0.00 平均评分 (0% 分数) - 0