rust笔记-数组

数组

rust中有两种数组,一个是长度固定,访问速度很快的array,另外一个是长度可变的Vec。我们先来看看array。它有下面特点:

  1. 长度固定
  2. 元素类型必须相同
  3. 在内存中联系存储

创建

let a = [1, 2, 3]; 
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [3; 5];
let months = ["January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"];

访问

数组的元素是连续存储的,所以可以使用下标访问。

fn main() {
    let a = [1, 2, 3];
    println!("a[0] is {}", a[0]);
    println!("a[1] is {}", a[1]);
    println!("a[2] is {}", a[2]);
}

因为数组长度固定,如果访问的索引超出了数组的长度,程序就会报错。Rust 将检查你指定的索引是否小于数组长度。如果索引大于或等于数组长度,Rust 会出现 panic。需要注意的是这种检查只能在运行时进行。

数组的元素可以是任何类型,包括在数组中再包含一个数组。但是需要注意对于不支持Copy的类型,不能使用let array = [类型, 长度]这样的声明方式,因为在这中声明方式中,每个元素都是使用copy完成的创建。此时可以使用上面第一种方式或者std::array::from_fn

let array: [String; 8] = std::array::from_fn(|_i| String::from("rust is good!"));

数组的长度也是数组的一部分,所以[u8; 3]和[u8; 4]是不同的类型,这点和C语言是不一样的。

数组切片

数组切片是对数组的一个片段的引用,切片是对底层数据的引用,所以开销很小。切片类型[T]拥有不固定的大小,而切片引用类型&[T]则具有固定的大小,因为 Rust 很多时候都需要固定大小数据类型,因此&[T]更有用,&str字符串切片也同理。
下面是一个使用数组切片的例子:

fn main() {
    let array = [1, 2, 3, 4, 5, 6];
    let slice = &array[1..4];
    println!("{:?}", slice);
}
### 动态数组Vec

Vec是动态数组,它的大小可以改变,并且可以包含多种类型的元素。
posted @   NoodlesYang  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示