一、前言
基本的数据结构各种语言都会有自己的实现,rust也不例外。
在rust中,这些数据结构的实现被称作“集合”,被放置在了std::colections
中。
内容并不算多,只有4个而已,个人认为Vec
也应该算它的一部分,可能是因为其太过于常用,所以直接将其放在了全局,而没有放在该空间内。
至于迭代器,是所有集合所通用的方法,所以也会在本章对其进行讲解。
二、Vec
首先第一个便是用的最多的集合:Vec,也就是动态数组,它可以自动扩容。
初始化它的方式主要有三种:
let v1: Vec<i32> = Vec::new();
let v2: Vec<i32> = Vec::with_capacity(1000);
let v3: Vec<i32> = vec![1, 2, 3];
第一种最常见,就是用new函数创建一个空的本实例。
第二种则是用于事先分配指定容量的数组示例,其内同样为空。
如果你事先知道这个数组里面最多存放指定个数的元素,那么使用第二种方式效率会更高,因为它就无需因空间不够导致重新分配内存、复制数据。
第三种使用vec提供的宏,通过指定元素直接生成带有数据的数组。
一般访问、修改直接用下标即可:
let mut v=vec![1,2,3];
let n=v[2];
v[1]=100;
只是需要注意一下,下标是从0开始的。
至于增加,由于是数组,一般推荐只从末尾追加,但你也可以在任意下标插入元素,只不过效率可能不够好:
fn main() {
let mut v = vec![1, 2, 3];
v.push(5); //末尾推入元素5
v.insert(0, 6); //0号位置插入元素6
}
而删除元素,也有两种方式: