当前位置: 首页 > news >正文

rust切片

切片类型写为[T]。
切片是序列的一个片段。
它是动态大小类型,所以要使用切片类型,就必须使用它的指针类型。引用是最常用的指针类型。
[T; n]能隐式转换成[T]。

一、定义切片
(一)不可变切片
&[T],共享切片,是不可变引用。
语法格式如下

let sliced_value: &[type] = &data[x..y]

data是个数组或向量

x..y表示 [x, y) 的数学含义。.. 两边可以没有运算数
..y等价于0..y
x.. 等价于位置x到结束
.. 等价于位置0到结束

(二)可变切片
&mut [T],可变切片,是可变引用。
使用&mut关键字
语法格式

let slice_name: &mut[type] = &mut data[start..end]

data是个数组或向量
例子

fn main(){let mut data = [10,20,30,40,50];use_slice(&mut data[1..4]);// passes references of     20, 30 and 40println!("{:?}",data);
}
fn use_slice(slice:&mut [i32]) {println!("切片的长度为:{:?}",slice.len());println!("{:?}",slice);slice[0] = 1010; // replaces 20 with 1010
}
编译运行结果如下
切片的长度为:3
[20, 30, 40]
[10, 1010, 30, 40, 50]

二、使用切片
(一)获取长度
例子

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
println!("{}", a.len());

(二)访问元素
[]
访问切片内容的时候,下标索引是从 0 开始的。

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
println!("{}", a[0]);

(三)遍历切片
1.使用索引

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
for i in 0..a.len() {a[i] = 0;print!("{} ", a[i]);
}

2.使用引用

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
for i in a {*i = 0;print!("{} ", i);
}

3.使用迭代器

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
for i in a.iter() {print!("{} ", i);
}let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
for i in a.iter_mut() {*i = 0;print!("{} ", i);
}

(四)切片作为函数参数
只能通过引用的方式传递给函数。

例子

fn main(){let data = [10,20,30,40,50];use_slice(&data[1..4]);
}
fn use_slice(slice:&[i32]) {println!("length of slice is {:?}",slice.len());println!("{:?}",slice);
}
编译运行结果如下
length of slice is 3
[20, 30, 40]

(五)切片转向量

let mut arr: [u32; 5] = [1, 2, 3, 4, 5];
let a = &mut arr[2..4];
let v = a.to_vec();
println!("{:?}", v);
http://www.lryc.cn/news/169710.html

相关文章:

  • 2023/9/18 -- C++/QT
  • vue柱状图+折线图组合
  • js中如何实现一个简单的防抖函数?
  • mysq 主从同步错误之 Error_code 1032 handler error HA_ERR_KEY_NOT_FOUND
  • 蓝桥杯 题库 简单 每日十题 day4
  • l8-d21 域名解析与http服务器实现原理
  • 网络安全(黑客技术)自学规划
  • 阻止用邮件不停注册wordpress账户的方法
  • 低代码工具大比拼:哪个最适合你?
  • 用Python实现链式调用
  • 基于SSM的汽车租赁后台管理系统
  • Word 文档转换 PDF、图片
  • 解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose
  • [ABC118D] Match Matching
  • 程序员必须掌握哪些算法?
  • Java高级之File类、节点流、缓冲流、转换流、标准I/O流、打印流、数据流
  • 解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)
  • 华为云云耀云服务器L实例评测|了解配置和管理L型云服务器
  • 【面试题】——Java基础篇(33题)
  • 记一次 .NET 某电力系统 内存暴涨分析
  • 1.SpringEL初始
  • HTTP 状态码
  • ddtrace 系列篇之 dd-trace-java 项目编译
  • 华为aarch64架构的泰山服务器EulerOS 2.0 (SP8)系统离线安装saltstack3003.1实践
  • C#中的方法
  • 【Flowable】使用UEL整合Springboot从0到1(四)
  • WebGL 计算点光源下的漫反射光颜色
  • Java精品项目源码第61期垃圾分类科普平台(代号V061)
  • 【Unity3D】资源管理
  • 数据结构-----队列