向量

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);
}

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容