Vector快速入门
# vector 快速入门
它和数组是相反的,它是存在堆上的、是
Rust
标准库帮你做的功能、长度可以自动扩充。
# 使用宏来定义
fn main() {
let tags = vec!["php", "java"];
println("{:?}", tags);
}
1
2
3
4
2
3
4
如果要动态加,我们需要加上mut
修饰。
fn main() {
let mut tags = vec!["php", "java"];
tags.push("go");
println!("{:?}", tags);
}
1
2
3
4
5
2
3
4
5
# 使用 Vec::new 来创建
fn main() {
let mut tags = Vec::new();
tags.push("go");
tags.push("php");
tags.push("js");
println!("{:?}", tags);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 遍历
可以使用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);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
如果是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()); // 错误
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
这个时候还行使用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`.
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
它会让你使用引用的方式去借用
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());
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
修改里面的值,需要使用mut
加解引用
fn main() {
let mut tags = Vec::new();
tags.push(1);
tags.push(2);
// 左闭右开区间
for i in &mut tags {
// 解引用
*i = *i + 10
}
println!("{:?}", tags);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
此时循环里的i
就相当于是一个套上了&
的引用,我们需要使用解引用获取原有的值然后才能去加减。
编辑 (opens new window)
上次更新: 2022/12/08, 22:08:26