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

dedecms 网站地图做网站销售的

dedecms 网站地图,做网站销售的,网站项目整体思路,制作网站微信登陆入口博主未授权任何人或组织机构转载博主任何原创文章#xff0c;感谢各位对原创的支持#xff01; 博主链接 博客内容主要围绕#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——数组、向量和切片一、数组、向量和…博主未授权任何人或组织机构转载博主任何原创文章感谢各位对原创的支持 博主链接 博客内容主要围绕        5G/6G协议讲解        高级C语言讲解        Rust语言讲解 文章目录 Rust 基础数据类型介绍——数组、向量和切片一、数组、向量和切片1.1 数组1.1.1 数组的声明方法11.1.2 数组的声明方法2 1.2 向量1.2.1 向量分配方法11.2.2 向量分配方法21.2.3 向量分配方法31.2.4 向量分配方法41.2.5 向量内部实现介绍1.2.6 向量的基本操作 1.3 切片 Rust 基础数据类型介绍——数组、向量和切片 Rust中的数据类型如下所示我会分多篇博客来介绍下面先看一个总览 类型简要说明i8、i16、i32、i64、i128、u8、u16、u32、u64、u128给定位宽的有符号整数和无符号整数isize、usize与机器字32bit、64bit一样大的有符号整数和无符号整数f32、f64单精度IEEE浮点数和双精度IEEE浮点数bool布尔值charUnicode字符32位宽4字节单元元组空元组charu8i32元组允许混合类型BoxAttend指向堆中值的拥有型指针i32、mut i32共享引用和可变引用非拥有型指针其生命周期不能超出引用目标StringUTF-8字符串动态分配大小str对str的引用指向UTF-8文本的非拥有型指针[f64;4]、[u8;256]数组固定长度其元素类型都相同Vec[f64]向量可变长度其元素类型都相同[u8]、*mut [u8]对切片数组或向量某一部分的引用包含指针和长度Optionstr可选值或为None无值或者为Some(v)有值其值为vResultu64, Error可能失败的操作结果或者为成功值OK(v)或者为错误值Err(e)struct S { x: f32, y: f32 }具名字段型结构体struct T(i32, char);元组型结构体struct E;单元型结构体无字段enum Attend { OnTime, Late(u32)}枚举或代数数据类型dyn Any、mut dyn Read特型trait对象是对任何实现了一组给定方法的值的引用fn(str)-bool函数指针闭包类型没有显式书写形式闭包 一、数组、向量和切片 Rust使用三种类型来表示内存中的值序列 类型[T; N]表示N个值的数组其类型为T。数据的大小是在编译期确定的并且是类型的一部分不能追加新元素或缩小数组类型VecT可称为 T的向量它是一个动态分配且可增长的T类型的值序列。向量元素存在于堆内存中因此可以随意调整向量的大小类型[T]和mut [T]可称为T的共享切片和T的可变切片它们是对一系列元素的引用这些元素可以是数据或向量的一部分。共享切片[T] 允许在多个读者之间共享访问权限但不允许修改元素可变切片mut [T] 允许读取和修改元素但不能共享 给定这3种类型中的任意一种类型的值v表达式v.len()会给出 v 中的元素数而v[i]引用的是 v 中的第 i 个元素i 的类型必须是 usize。v的第一个元素是v[0]最后一个元素是v[v.len()-1]。Rust会检查 i 是否在正确的范围内如果没有则会出现panic。 1.1 数组 1.1.1 数组的声明方法1 可以在声明变量的同时通过 方括号 来初始化一个数组。 fn main() {let array:[i32;3] [2, 3, 5];println!({:?}, array);assert_eq!(array.len(), 3); }1.1.2 数组的声明方法2 对于一些较长的数组需要填充一些值时可以使用[V; N]方法其中V是每个元素的值N是长度。下面的代码声明了一个长度为300的数组其中每个元素初始值为100。 fn main() {let mut array [100; 300];for i in 1..array.len() {array[0] array[i];}println!(array[0]{}, array[0]);assert_eq!(array.len(), 300); }Rust中没有任何能定义未初始化数组的写法。且数组的长度是其类型的一部分并会在编译器固定下来。如果n是变量则不能写成 [100; n] 以期望得到一个包含 n 个元素的数组。当你需要一个长度在运行期可变的数组时请使用向量。 数组上看到的那些方法遍历、查找、排序、填充、过滤等都是作为切片而非数组的方法提供的。但Rust在搜索各种方法时会隐式地将对数组的引用转换为切片因此可以直接在数组上调用任何切片的方法 let mut chaos [3, 5, 4, 1, 2]; chaos.sort(); assert_eq!(chaos, [1, 2, 3, 4, 5]);上面的代码中sort()函数是定义在切片上的但是由于它是通过引用获取的操作目标因此Rust会隐式地生成一个整数组数的 mut [i32] 切片并将其传给 sort 来进行操作。 1.2 向量 向量VecT是一个可调整大小的T类型元素的数组它是在堆上分配的。我们这里先介绍几种简单的分配向量的方法。 1.2.1 向量分配方法1 使用vec!宏来分配向量它使用起来感觉特别像数组 fn main() {let vector vec![1,2,30];println!({}, vector.iter().product::i32()); }与数组不同的是我们可以动态地向它添加元素 fn main() {let mut vector vec![1,2,30];println!({}, vector.iter().product::i32());vector.push(40);println!({}, vector.iter().product::i32()); }1.2.2 向量分配方法2 还可以通过给定值重复一定次数来构建向量可以再次使用模仿数组字面量的语法 fn main() {let mut vector vec![2;3];println!({}, vector.iter().product::i32()); }1.2.3 向量分配方法3 vec! 宏相当于调用 Vec::new来创建一个新的空向量然后将元素压入其中例如下面的代码 fn main() {let mut vector Vec::new();vector.push(3);vector.push(7);vector.push(9);println!({}, vector.iter().product::i32()); }1.2.4 向量分配方法4 还有一种方法是从迭代器生成的值构建一个向量 fn main() {let vector:Veci32 (1..5).collect();println!({}, vector.iter().product::i32()); }使用collect时通常需要指定类型因为它可以构建出不同种类的集合而不仅仅是向量。通过指定vector的类型我们明确表达了自己想要哪种集合。 与数组类型一样可以对向量使用切片的方法 fn main() {let mut palindrome vec![a man, a plan, a canal, panama];palindrome.reverse();println!({:?}, palindrome); }上面的代码中reverse方法实际上是在切片上定义的但是此调用会隐式地从此向量中借用一个 mut [str] 切片并在其上调用reverse。 1.2.5 向量内部实现介绍 VecT是由3个值组成的 指向元素在堆中分配的缓冲区的指针缓冲区能够存储的元素数量即向量容量目前实际包含的元素数量也就是它的长度 当缓冲区达到其最大容量时往向量中添加另一个元素需要分配一个更大的缓冲区将当前内容复制到其中更新向量的指针和向量容量以指向新缓冲区最后释放旧缓冲区。 如果事先知道向量元素数量就可以调用Vec::with_capacity而不是Vec::new来创建一个向量它的缓冲区足够的大可以从一开始就容纳所有的元素然后将所有元素逐个添加到向量中而不会导致任何重新分配。当然如果实际的元素数量超出了预估的数量还是会重新分配缓冲区的。 vec!宏就使用了上面的技巧因为它知道最终向量将包含多少个元素。 向量的len方法会返回它现在包含的元素数而capacity方法则会返回在不重新分配的情况下可以容纳的元素数 fn main() {let mut vector:Veci32 Vec::with_capacity(2);println!(len is {}, vector.len());println!(capacity is {}, vector.capacity());vector.push(2);vector.push(3);println!(len is {}, vector.len());println!(capacity is {}, vector.capacity());vector.push(4);println!(len is {}, vector.len());println!(capacity is {}, vector.capacity()); }上面代码的运行结果如下图最后打印出的容量大小不能保证恰好为4但至少大于等于3因为此向量包含3个元素。 1.2.6 向量的基本操作 可以在向量中任意位置插入元素和移除元素不过这些操作会将受影响位置之后的所有元素向前或向后移动因此如果向量很长就可能很慢。 下面的代码展示在恰当位置插入一个元素的insert方法和删除一个恰当位置元素的remove方法 fn main() {let mut v vec![10, 20, 30, 40, 50];println!({:?},v);// 在索引为3的元素处插入35v.insert(3, 35);println!({:?},v);// 移除索引为1的元素v.remove(1);println!({:?},v); }下面的代码展示使用push方法在向量末尾添加一个元素和pop方法移除向量中的最后一个元素并返回其值 fn main() {let mut v vec![Snow Puff, Glass Gem];println!(remove {:?}, current value is {:?},v.pop(),v);println!(remove {:?}, current value is {:?},v.pop(),v);println!(remove {:?}, current value is {:?},v.pop(),v); }上面代码运行结果为 由上面的执行结果可以看到pop方法返回的值是一个OptionT类型如果 向量为空则返回None如果其最后一个值为 v 则返回Some(v)。 1.3 切片 切片是数组和向量中的一个区域写作[T]。由于切片可以是任意长度的因此它不能直接存储在变量中或作为函数参数传递。切片总是通过引用传递。对切片的引用是一个胖指针 双字值第一个字是指向切片中第一个元素的指针第二个字是切片中元素的数量 执行下面代码后的内存布局如下图所示。 fn main() {let v: Vecf64 vec![0.0, 0.707, 1.0, 0.707];let a: [f64; 4] [0.0, -0.707, -1.0, -0.707];let sv: [f64] v;let sa: [f64] a; }上面最后两行代码将Vecf64和[f64; 4]转换为直接指向数据的切片引用。 普通引用是指向单个值的非拥有型指针而切片的引用是指向内存中一系列连续值的非拥有型指针。如果要写一个对数组和向量进行操作的函数那么切片引用就是不错的选择。例如下面的代码 fn main() {let v: Vecf64 vec![0.0, 0.707, 1.0, 0.707];let a: [f64; 4] [0.0, -0.707, -1.0, -0.707];fn print(n: [f64]) {for elt in n {println!({}, elt);}}print(a); // 打印数组print(v); // 打印向量 }还可以使用范围值对数组或向量进行索引以获取一个切片的引用该引用既可以指向数组或向量也可以指向一个既有切片 print(v[0..2]) //打印v的前两个元素 print(a[2..]) //打印从a[2]开始的元素 print(sv[1..3]) //打印v[1]和v[2]与普通数组访问一样Rust会检查索引是否有效。尝试访问超出数组末尾的切片会导致panic 由于切片几乎总是出现在引用符号之后因此通常只将 [T] 或 str 之类的类型称为切片。
http://www.ho-use.cn/article/10818709.html

相关文章:

  • 大连推广网站搭建哪家好做音乐创作的网站
  • 网站开发人员岗位要求重庆公司网站seo
  • 衡水市网站建设公司安徽建设厅网站施
  • 专业建站公司设计方案小微企业所得税怎么征收
  • 网站建设联系合肥室内设计工作室
  • 网站开发技术案例物流公司网站建设有什么要点
  • 程序员创业做网站做公众号WordPress免插件实现QQ咨询
  • 丹江口市建设局网站网站制作软件手机
  • 开发网站私活邯郸市
  • 有没有给宝宝做辅食的网站wordpress 显示excel
  • 走出趣网站怎么做河南网站建设哪个公司做得好
  • asp.net个人网站怎么做开发网站公司的简介
  • 上海网站备案wordpress文章发布
  • 网站添加cmswordpress 表单提交
  • 漳州做网站讷河市铁道北建设高架桥
  • 网站ico图标怎么做怎样查找自己建设的网站
  • 成品网站代理wordpress数据迁移
  • 镇江市住房和城乡建设局网站广州工程建设信息网
  • 山东菏泽建设银行网站莱城高新区建设局网站
  • 做网站存在的问题网站建设 镇江
  • 淘客手机端网站建设wordpress 分类伪静态
  • 什么网站合适做流量石家庄做网站建设的公司排名
  • 秦皇岛 免费建网站门户网站建设哪专业
  • 苏州高级网站建设小说网站开发 公司
  • 易语言跳到指定网站怎么做wordpress广告不显示
  • 泰州网站制作方案如何做网站logo 设置平滑
  • 深圳网站制作济南网站无法下载视频 怎么做
  • 网站设计维护员机顶盒做网站
  • 深圳物流公司网站wordpress 模板 制作
  • 网站建设公司哪家好 该如何选择wordpress调用面包屑