为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第11天 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 的内存更为安全。
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
2
获赞与收藏
4

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消