跳到主要内容

vector快速入门

它和数组是相反的,它是存在堆上的、是Rust标准库帮你做的功能、长度可以自动扩充。

使用宏来定义

fn main() {
let tags = vec!["php", "java"];
println("{:?}", tags);
}

如果要动态加,我们需要加上mut修饰。

fn main() {
let mut tags = vec!["php", "java"];
tags.push("go");
println!("{:?}", tags);
}

使用Vec::new来创建

fn main() {
let mut tags = Vec::new();
tags.push("go");
tags.push("php");
tags.push("js");
println!("{:?}", tags);
}

遍历

可以使用for的方式来遍历

fn main() {
let mut tags = Vec::new();
tags.push("js");
tags.push("php");
tags.push("java");
// 左闭右开区间
for i in 0..tags.len() {
println!("{:?}", tags[i]);
}
println!("{:?}", tags);
}

如果是for i in xxx的方式,这里需要使用引用的方式

fn main() {
let mut tags = Vec::new();
tags.push("js");
tags.push("php");
tags.push("java");
// 左闭右开区间
for i in tags {
println!("{:?}", i);
}
println!("{:?}", tags.len()); // 错误
}

这个时候还行使用tags获取长度,这里会报错 ,

 fn into_iter(self) -> Self::IntoIter;
| ^^^^
help: consider iterating over a slice of the `Vec<&str>`'s content to avoid moving into the `for` loop
|
13 | for i in &tags {
| +

For more information about this error, try `rustc --explain E0382`.

它会让你使用引用的方式去借用

fn main() {
let mut tags = Vec::new();
tags.push("js");
tags.push("php");
tags.push("java");
// 左闭右开区间
for i in &tags {
println!("{:?}", i);
}
println!("{:?}", tags.len());
}

修改里面的值,需要使用mut加解引用

fn main() {
let mut tags = Vec::new();
tags.push(1);
tags.push(2);
// 左闭右开区间
for i in &mut tags {
// 解引用
*i = *i + 10
}
println!("{:?}", tags);
}

此时循环里的i就相当于是一个套上了&的引用,我们需要使用解引用获取原有的值然后才能去加减。