rust slice(切片)

概述

在rust中切片是一种引用类型,它使我们以引用的方式访问连续内存的数据。
本文介绍切片的定义、使用方法和相关特性。

slice定义

切片是对数据区域的引用,它由如下两个部分组成

  • pointer: 指向数据的起始地址;
  • length:包含的数据长度;

实例1

fn main() {
    let c = String::from("helloworld");

    let p1 = &c[0..5];
    let p2 = &c[5..10];

    println!("{}={}+{}", c, p1, p2);
}

输出结果:

helloworld=hello+world

x…y 表示 [x, y) 的数学含义。… 两边可以没有运算数:

..y 等价于 0..y
x.. 等价于位置 x 到数据结束
.. 等价于位置 0 到结束

实例2

创建了一个数组data,然后使用索引范围1…3创建了一个Sliceslice。这个Slice包含了数组data中索引1和索引2的两个元素。

fn main() 
{
    let data = [1, 2, 3, 4, 5];
    let slice = &data[1..3];
    println!("Slice: {:?}", slice);
}

输出结果:

Slice: [2, 3]

实例3

通过指针和长度来手动创建Slice

fn main() {
    let data = [1, 2, 3, 4, 5];
    let ptr = &data[1] as *const i32;
    let len = 3;
    let slice = unsafe { 
        std::slice::from_raw_parts(ptr, len) 
    };
    println!("Slice: {:?}", slice);
}

输出结果:

Slice: [2, 3]

slice特性

  1. 不可变和可变:Slice可以是不可变的(&[T])或可变的(&mut [T]),取决于它们所引用的数据的可变性。
  2. slice长度:通过.len()方法获取。
  3. slice迭代:通过.iter()方法进行迭代。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天选码农搬砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值