vector向量是一种可以动态或“可增长”的数组,被实现为标准库类型Vec<T>。vector总是在堆上分配数据。
1.常规用法
vector将他们的内容以连续存储在堆上,这意味着他们必须在编译时就知道T的大小。但是有些类型不可能再编译时就能够确定其大小,为此你需要保存一个指向该类型的指针:Box类型就适合这种情况。
let v:Vec<i32> = vec![1, 2, 3, 4, 5];
let v2:Vec<i32> = vec![0; 10];//10个i32数据类型的0
- 访问语法
要返回特定索引位置的值的话,那么使用[],和数组类似;元组使用.
let v:Vec<i32> = vec![1,2,3,4,5];
println!("{}", v[2]);
- 需要注意的地方:索引的数据类型必须为usize。下面举一个例子:
fn main(){
let v:Vec<i32> = vec![1,2,3];
let index:usize = 2;
println!("{}", v[index]);
}
如果你尝试利用一个非usize的索引去获取向量的值的话,那么将会抛出一个错误。
- 迭代:可以利用for...in...来迭代一个vector里面的元素。
var v:Vec<i32> = vec![1,2,3,4,5];
for value in v{
println!("{}", value);
}
需要注意的是,在使用vector的所有权遍历之后再次遍历它会出错。但是我们可以多次使用vector变量的引用进行多次遍历。
var v:Vec<i32> = vec![1,2,3,4];
for value in v{
println!("{}", value);
}
for value2 in v{
println!("{}", value2);//error:use of moved value: `v`
}
但是对他的引用进行多次遍历还是可以的:
var v:Vec<i32> = vec![1,2,3,4];
for value in &v{
println!("{}", value);
}
for value in &v{
println!("{}",value);
}
网友评论