课程名称:轻松实现Rust系统入门,实战编译器开发
课程章节: 第3章 Rust基本数据类型 3.9 切片类型
主讲老师:叶枭
课程内容:
今天学习的内容是 Rust 中的切片类型。
前面学习所有权时,学习了引用类型,它的特点是不拥有值的所有权。除了引用,Rust 中的切片(slice)类型,同样不持有值的所有权。
切片类型是对一个数组、字符串的引用片段。
切片有利于安全有效地访问数据的一部分,而不需要拷贝原始数据的内容。
切片在编译的时候,它的长度是未知的,在底层实现上,一个切片保存着两个 usize
类型的成员,第一个成员指向切片的起始位置的指针,第二个成员表示切片的长度。
字符串切片
字符串切片是指向 String
对象中某个连续部分的引用。
创建一个字符串切片,使用 &
表示,在方括号中设置切片的范围区间,格式为 [starting_index..ending_index]
,其中 starting_index
是切片起始位置的索引值,ending_index
是切片终止位置的索引值,在切片时不包含 ending_index
。
let str = String::from("hello world");
// 从 str 的索引0开始,取到第5个索引,这中间的5个字节作为一个切片
let hello = &str[0..5];
// 从 str 的索引6开始,取到第11个索引,这中间的5个字节作为一个切片
let world = &str[6..11];
..
是 Rust 的 Range 范围语法,它有一些简化的用法:
// 从索引0开始取值,可以省略掉 0:
let hello = &str[..5];
// 取值到最后一个索引,也可以省略掉。
let world = &str[6..];
// 开始索引和结束索引都省略掉,表示创建一个指向完整内容的切片
let s = &str[..];
字符串字面量就是切片
前面学习字符串的类型时,提到了 Rust 中有多种不同类型的字符串,其中最常用的就是 &str
字符串引用类型和 String
类型。
创建一个 &str
类型的字符串,就是写一个字符串字面量:
let str = "hello world";
变量 str
的类型就是 &str
,字符串字面量直接存储在二进制程序中,它就是一个指向二进制程序特定位置的切片。
数组切片
对一个数组(包括固定大小数组和动态数组)
fn main() {
let arr: [u32; 5] = [1, 2, 3, 4, 5];
// 取数组中的前三个值
let slice = &arr[0..3];
}
切片类型的方法
切片类型有很多内置方法,介绍两个常用的:
-
is_empty
:判断切片是否有内容 -
len
:获取切片内容的长度
let arr: [u32; 5] = [1, 2, 3, 4, 5];
let slice = &arr[0..3];
println!("{}", slice.is_empty()); // false
println!("{}", slice.len()); // 3
课程收获
这节课学习了 Rust 中的切片类型, 包括字符串类型的切片,数组类型的切片。通过切片类型,加深了 Rust 中内存管理上的一点认识,切片就是数据在内存中一段位置的引用。所有权,引用,切片,这几个概念,使得 Rust 的内存更为安全。
共同学习,写下你的评论
评论加载中...
作者其他优质文章