赞
踩
本文节选自<<Rust语言圣经>>一书
欢迎大家加入Rust编程学院,一起学习交流:
QQ群:1009730433
动态数组类型用Vec<T>
表示,事实上,在之前的章节,它的身影多次出现,我们一直没有细讲,只是简单的把它当作数组处理。
动态数组允许你存储多个值,这些值在内存中一个紧挨着另一个排列,因此访问其中某个元素的成本非常低。动态数组只能存储相同类型的元素,如果你想存储不同类型的元素,可以使用之前讲过的枚举类型或者特征对象.
总之,当我们想拥有一个列表,里面都是相同类型的数据时,动态数组将会非常有用。
在Rust中,有多种方式可以创建动态数组。
使用Vec::new
创建动态数组是最rusty的方式,它调用了Vec
中的new
关联函数:
let v: Vec<i32> = Vec::new();
这里, v
被显式地声明了类型Vec<i32>
,这是因为Rust编译器无法从Vec::new()
中得到任何关于类型的暗示信息,因此也无法推导出v
的具体类型,但是当你向里面增加一个元素后,一切又不同了:
let mut v = Vec::new();
v.push(1);
此时,v
就无需手动声明类型,因为编译器通过v.push(1)
,推测出v
中的元素类型是i32
,因此推导出v
的类型是Vec<id3>
.
还可以使用宏vec!
来创建数组,与Vec::new
有所不同,前者能在创建同时给予初始化值:
let v = vec![1, 2, 3];
同样,此处的v
也无需标注类型,编译器只需检查它内部的元素即可自动推导出v
的类型是Vec<i32>
(Rust中,整数默认类型是i32,在数值类型中有详细介绍)。
向数组尾部添加元素,可以使用push
方法:
let mut v = Vec::new();
v.push(1);
与其它类型一样,必须将v
声明为mut
后,才能进行修改,.
跟结构体一样,Vector
类型在超出作用域范围后,会被自动删除:
{
let v = vec![1, 2, 3];
// ...
} // <- v超出作用域并在此处被删除
当Vector
被删除后,它内部存储的所有内容也会随之被删除。目前来看,这种解决方案简单直白,但是当vector
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。