0
点赞
收藏
分享

微信扫一扫

rust个人学习(2)

Ewall_熊猫 2022-03-13 阅读 76

rust个人学习(2)

**常用结构:**

	**数组**:
		[T;N]表示一个N个值的数组,每个值的类型都是T
		数组在编译时确定大小,不能像数组追加元素,也不能缩短数组
		数组方法有迭代元素、搜索、排序、填充、筛选
		sort方法是在切片上定义的,会隐式地将数组作为切片的饮用&mut [T]
		len也是切片方法
		
	**向量**:
		Vet<T>叫做T类型的向量,是一种可以动态分配、可扩展二点类型T的值序列
		向量元素分配在堆上,因此可以随意缩放:向其中追加向量、删除元素,推入元素
		创建向量最简单的方式是vec!宏
		调用Vec!宏,相当于调用Vec::new创建一个新的空向量
		Vec::new()是另一种创建向量的方法
		基于迭代器产生的值可以创建向量let mut vt:Vec<i32>=(0..6).collect();
		使用collet时要写明类型,因为collect可以构建多种集合
		使用Vec::with_capacity代替Vec::new(),初始分配cap,可减少内存分配次数
		可以在向量的任何位置随意插入或者删除元素,会导致插入前后的元素全部前移或者后移
		push()方法push一个T类型的元素在向量末尾
		pop()方法pop一个T类型的元素在向量末尾,返回值是Option<T>;如果向量为空,返回None,否则返回Some(v)
		std::env::args().skip(1).collect();将命令行参数转换为字符串向量
		向量转化为切片,只需&vecname
		
	**切片**
		&[T]和&mut [T]叫做T类型的共享切片和T类型的可修改切片
		是对其他值,比如数组或者向量中部分元素序列的引用
		&mut [T]允许读写元素,但不能共享
		&[T]允许多个读者读取,但不允许修改元素
		切片可以是任意长度,不能直接保存到变量中,也不能作为函数参数传递
		切片永远只能按引用传递
		切片的引用是一个胖指针,即一个双字宽的值,保存着指向切片第一个元素的指针和切片中元素的个数。
        
        这三种类型的值v,v.len()返回v的元素数量,使用v[i]访问元素
        rust会检查边界,越界会panic
        i必须是usize值,其他类型都不能用作索引
        
    **字符串类型**:
    	r"str"使用原始字符串无需转义
    	''字符串字面量里的单引号无需转义
    	字节字符串,b'G',字节字符串是u8值切片,相当于go语言的byte
    	字节字符串不是Unicode文本切片,只能包含ascii和\xHH转义序列
    	原始字节字符串,br""
    	rust字符串在内存中不是以char数组存储的,而是unicode字符序列,使用UTF-8可变宽度编码存储,每个ascii字符用一个字节存储,其他字符使用多个字节存储,比如一个汉字,使用3个字节存储
    	string是一个能够存储完好utf-8的Vec<u8>
    	&str字符串引用是无法修改的
    	需要在运行时修改,使用String
    	to_string()方法可以把&str转换为String,实质上是new一个String,复制&str的值
    	format!()宏用法与print!()相同,但是它相当于go语言的fmt.Sprint()函数,返回一个转换后的string,而非打印输出
    	没有formatln!宏,所以format!宏不会在末尾加上换行符
    	&str更适合作为函数参数
    	字符串支持==、!=、<、>等运算
举报

相关推荐

spring个人学习笔记2

HTML个人学习

Java个人学习7

SiamFC个人学习笔记

TS学习(个人学习笔记)

Spark个人学习笔记

0 条评论