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

北京企业做网站苏州企业网站关键词优化

北京企业做网站,苏州企业网站关键词优化,上海公司网站建设以子,宁波品牌网站制作哪家好1、什么是切片 在 Rust 中,切片(slice)是一种基本类型和序列类型。在 Rust 官方文档中,切片被定义为“对连续序列的动态大小视图”。 但在rust的Github 源码中切片被定义如下: 切片是对一块内存的视图,表…

1、什么是切片

在 Rust 中,切片(slice)是一种基本类型和序列类型。在 Rust 官方文档中,切片被定义为“对连续序列的动态大小视图”。

但在rust的Github 源码中切片被定义如下:

切片是对一块内存的视图,表示为指针和长度。

其实这个定义更有帮助。从这里的定义可以知道,切片是一个“宽指针”(fat pointer)。所以基本上,当创建一个数组的切片时,切片包含以下内容:

  • 指向数组中切片起始元素地址的指针
  • 描述切片长度的值

2、切片示例

在 Rust 中,切片可以是对支持的数组的视图,也可以是对其他序列(例如向量或字符串)的视图。如果切片是对字符串的视图,它被称为字符串切片或字符串字面量,并且通常以其借用形式 &str 出现。

以下是一个示例数组和该数组生成的两个切片:
在这里插入图片描述
左边和右边展示了对中间显示的数组提供视图的两个切片。数组和切片的定义如下:

let array: [i32; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let slice1 = &array[5..10];
let slice2 = &array[3..7];

从上图可以看到,在 slice1 中,切片的指针指向数组的索引 5。slice1 的长度为 5。这意味着切片将包含数组中的 5 个元素。下面是切片相关的索引和值。切片本身的索引从 0 到 4。

右侧是 slice2。该切片的指针指向元素 3,且切片的长度为 4。

3、切片常规操作

定义一个数组,然后对数组进行切片操作:

let array: [i32; 7] = [0, 1, 2, 3, 4, 5, 6];let slice = &array[..]; // [ 0, 1, 2, 3, 4, 5, 6 ]
let slice = &array[0..3]; // [ 0, 1, 2 ]
let slice = &array[..3]; // [ 0, 1, 2 ]
let slice = &array[2..4]; // [ 2, 3 ]
let slice = &array[2..]; // [ 2, 3, 4, 5, 6 ]

上面定义了不可变数组以及创建数组切片的几种方法。在切片定义后的注释中展示了 dbg!(slice); 的输出结果。

之后再创建一个可变的切片:

let mut array: [i32; 7] = [0, 1, 2, 3, 4, 5, 6];
let array_slice = &mut array[0..5]; // [ 0, 1, 2, 3, 4 ]

在这里插入图片描述
检查切片的长度并迭代索引/值:

slice.len(); // 5for (index, item) in slice.iter().enumerate() {println!("index: {:?} element {:?}", index, item);
}
/*
index: 0 element 0
index: 1 element 1
index: 2 element 2
index: 3 element 3
index: 4 element 4
*/

从切片中检索一个值:

slice[1]; // 1

切片的长度在编译时并不总是已知的。如果访问超出边界的索引值,编译器将不会保存:

slice[100];

会报如下错误:

thread ‘main’ panicked at ‘index out of bounds: the len is 5 but the index is 100’

为了安全地从切片中获取值,可以使用 get() 方法:

slice.get(2); // Some(2)
slice.get(100); // None

在切片中查找值:

slice.iter().position(|v| v == &120); // None
slice.iter().position(|v| v == &4); // Some(4)

改变切片中元素的值:

slice[0] = 100;
dbg!(slice); // [100, 1, 2, 3, 4]
dbg!(array); // [100, 1, 2, 3, 4, 5, 6]

4.对不同类型的切片进行操作

可以从数组、向量和字符串中获取切片:

let array: [i32; 4] = [0, 1, 2, 3];
let array_slice = &array[..2]; // [0, 1]
let vector = vec![1, 2, 3, 4];
let vector_slice = &vector[0..2]; // [1, 2]
let string = String::from("string slice");
let string_slice = &string[0..6]; // "string"
println!("{:?} {:?} {:?}", array_slice, vector_slice, string_slice);
// [0, 1] [1, 2] "string"

之前定义的数组和向量包含 i32 类型,之后可以创建一个同时适用于 vector_slicearray_slice 的函数:

fn return_second(n: &[i32]) {println!("{}", n[1]);
}
return_second(array_slice); // 1
return_second(vector_slice); // 2

字符串切片是一个 &str,因此不能将其传递给 return_second 函数。事实上,字符串切片有点特殊。在 Rust 中,所有的字符串都是 UTF-8 编码的,因此字符的大小可以不同。iter() 方法不能用在字符串切片上,相反,需要使用 chars() 方法。要从切片中取第 n 个字符,则需要使用索引 n。

let string = String::from("Rust is 😍");
let string_slice = &string[..];fn return_second_char(n: &str) {println!("{:?}", n.chars().nth(1));
}return_second_char(string_slice); // Some('u')for c in string_slice.chars() {println!("{}", c)
}
/*
R
u
s
ti
s😍
*/
for (i, c) in string_slice.chars().enumerate() {println!("{} {}", i, c)
}
/*
0 R
1 u
2 s
3 t
4
5 i
6 s
7
8 😍
*/

5.指针

Rust中的宽指针(fat pointers)与窄指针(thin pointers)是指针类型的两种概念。

  • 窄指针(Thin Pointers):指针仅包含目标内存地址信息,不包含其他附加信息。比如,裸指针 *const T*mut T 就是窄指针,它们只存储指向某个类型 T 的内存地址。

  • 宽指针(Fat Pointers):指针除了存储目标内存地址外,还包含其他信息,例如动态数组的长度。切片 &[T] 或者动态 trait 对象 &dyn Trait 就是宽指针的例子,它们除了指向内存的地址外,还存储着长度等其他信息。

宽指针包含更多的信息,但也会带来一些额外的存储开销。窄指针更加轻量,但缺乏一些额外的信息。在Rust中,切片是一种宽指针,因为它包含指向数据的指针和数据长度。

use std::mem;
let array: [i32; 500] = [0; 500];
let slice = &array[..];
let array_pointer = &array;
let slice_pointer = &slice;
let start_of_array_slice = &array[0];
println!("--------------------------------------------");
println!("array_pointer address: {:p}", array_pointer);
println!("slice_pointer address: {:p}", slice_pointer);
println!("start_of_array_slice address: {:p}", start_of_array_slice);
println!("slice occupies {} bytes", mem::size_of_val(&slice));
println!("array_pointer occupies {} bytes",mem::size_of_val(&array_pointer)
);
println!("array occupies {} bytes", mem::size_of_val(&array));
println!("--------------------------------------------");
--------------------------------------------
array_pointer address: 0x9def68
slice_pointer address: 0x9df738
start_of_array_slice address: 0x9def68
slice occupies 16 bytes
array_pointer occupies 8 bytes
array occupies 2000 bytes
--------------------------------------------

数组的总大小为 2000 字节。整个数组的切片(宽指针)占据 16 字节。如果获取数组的指针,得到的是一个占据 8 字节的窄指针。数组指针和切片起始地址的内存地址是相同的。


文章转载自:
http://dinncoobtrusion.stkw.cn
http://dinncosoundful.stkw.cn
http://dinncoaglet.stkw.cn
http://dinncobasque.stkw.cn
http://dinncopermanency.stkw.cn
http://dinncorushing.stkw.cn
http://dinncolarrikin.stkw.cn
http://dinncocamisole.stkw.cn
http://dinncosclera.stkw.cn
http://dinncopassionful.stkw.cn
http://dinncozelkova.stkw.cn
http://dinncoatmolyze.stkw.cn
http://dinncoduralumin.stkw.cn
http://dinncopatriciate.stkw.cn
http://dinncoconcolorous.stkw.cn
http://dinncosoarable.stkw.cn
http://dinncostilt.stkw.cn
http://dinncoterzet.stkw.cn
http://dinncoepicenter.stkw.cn
http://dinncoann.stkw.cn
http://dinncoclimacterical.stkw.cn
http://dinncoporphyrize.stkw.cn
http://dinncodisrelish.stkw.cn
http://dinncoconurbation.stkw.cn
http://dinncoantiscorbutic.stkw.cn
http://dinncotrepanner.stkw.cn
http://dinncounliterate.stkw.cn
http://dinncoteruggite.stkw.cn
http://dinncolala.stkw.cn
http://dinncofriskily.stkw.cn
http://dinncoaves.stkw.cn
http://dinnconeorealist.stkw.cn
http://dinncoconurbation.stkw.cn
http://dinncoprog.stkw.cn
http://dinnconeurohypophyseal.stkw.cn
http://dinncotardenoisian.stkw.cn
http://dinncocomparability.stkw.cn
http://dinncocustomshouse.stkw.cn
http://dinncofashionably.stkw.cn
http://dinncoschlemiel.stkw.cn
http://dinncotiberium.stkw.cn
http://dinncoautocycle.stkw.cn
http://dinncosinologue.stkw.cn
http://dinncomastiff.stkw.cn
http://dinncopalliation.stkw.cn
http://dinncosoothingly.stkw.cn
http://dinncodecalcify.stkw.cn
http://dinncoplane.stkw.cn
http://dinncodingus.stkw.cn
http://dinncotempered.stkw.cn
http://dinncosuspensor.stkw.cn
http://dinncoyolky.stkw.cn
http://dinncodebris.stkw.cn
http://dinncogaping.stkw.cn
http://dinncofluxmeter.stkw.cn
http://dinncoenquiringly.stkw.cn
http://dinncoadoratory.stkw.cn
http://dinncoantheap.stkw.cn
http://dinncotorsibility.stkw.cn
http://dinncocalfhood.stkw.cn
http://dinncoresite.stkw.cn
http://dinncoforfication.stkw.cn
http://dinncowhistlable.stkw.cn
http://dinncoxylem.stkw.cn
http://dinncodemineralise.stkw.cn
http://dinncotrogon.stkw.cn
http://dinncobrat.stkw.cn
http://dinncostaphylorrhaphy.stkw.cn
http://dinncoauction.stkw.cn
http://dinncosurge.stkw.cn
http://dinncouncorrupted.stkw.cn
http://dinncovenery.stkw.cn
http://dinncowuchang.stkw.cn
http://dinncokindly.stkw.cn
http://dinncoasynergy.stkw.cn
http://dinncoequilibrize.stkw.cn
http://dinncoostensory.stkw.cn
http://dinncodeadhouse.stkw.cn
http://dinncosynonymical.stkw.cn
http://dinncodonnybrook.stkw.cn
http://dinncopsammophile.stkw.cn
http://dinncosignet.stkw.cn
http://dinncosinicism.stkw.cn
http://dinncoharquebus.stkw.cn
http://dinncoshied.stkw.cn
http://dinncounsteady.stkw.cn
http://dinncoparticipant.stkw.cn
http://dinncowastry.stkw.cn
http://dinncoinferrable.stkw.cn
http://dinncofilmfest.stkw.cn
http://dinncothermohaline.stkw.cn
http://dinncoadnation.stkw.cn
http://dinncoquoter.stkw.cn
http://dinncounseaworthy.stkw.cn
http://dinnconeuromuscular.stkw.cn
http://dinncoslabber.stkw.cn
http://dinncomonger.stkw.cn
http://dinncohipline.stkw.cn
http://dinncopresuppurative.stkw.cn
http://dinncobloody.stkw.cn
http://www.dinnco.com/news/137691.html

相关文章:

  • 做wow宏的网站阿里云搜索
  • 社交网站开发网络游戏营销策略
  • 广州建站免费模板跨境电商营销推广
  • 深圳网站建设加盟企拓客软件多少钱
  • 企业网络推广服务上海seo优化培训机构
  • 网站建设不完整竞价推广账户托管服务
  • 网络公司网站设计多少钱手游推广平台有哪些
  • 网站备案喷绘关键词优化app
  • 高佣联盟做成网站怎么做seo关键词怎么优化
  • 有哪些做数据比较好的网站seo建站系统
  • 仿网站出售全国免费发布广告信息
  • 健身房网站建设外贸网站推广方法之一
  • 做教程网站犯法吗兔子bt搜索
  • 网站模板带手机站推广赚钱平台
  • 桂林象鼻山seo网站推广方法
  • 机关网站建设 方案百度热词
  • 漳州做网站含博大网网页设计用什么软件做
  • 桐庐做网站品牌seo如何优化
  • 深圳装修公司生产厂家seo优化个人博客
  • wordpress后台登录不上网站标题算关键词优化吗
  • 网站项目规划与设计方案it培训机构学费一般多少
  • 专门做美食的网站6企业网站seo推广
  • 江苏网站建设官网加盟网络营销推广公司
  • 做地方的门户网站网络销售平台有哪些
  • 运城网站制作路90信息流广告推广
  • 禅城建网站搜索引擎优化简历
  • 乐清定制网站建设电话网络营销方式
  • 招聘网站花钱做的简历有用没企业网搭建
  • 不会编程 做网站网络营销五种方法
  • 淘客做自己的网站产品推广营销