//vectors
![](https://img.haomeiwen.com/i8207483/d2170b10dcb1f55f.jpg)
下面是创建一个 Vector 方法,我们也可以可以调用 Vect::new 方法来创建一个空的 Vector。
fn main(){
let x = vec![1,2,3,4,5];
}
在 c++ 中的 vec 本质是模板,而在 Rust 中 Vector 是宏,有关宏的概念比较高级我们在以后内容来分享,这里大家需要了解到 vector 有两个参数表示 vector 的承载能力,一个是 Vector 的长度,一个是 Vector 扩展能力,所谓的扩展能力就是预留多少内存给 Vector 放置更多元素。
let mut v = Vec::new();
v.push(5);
v.push(6);
v.push(7);
v.push(8);
for i in &v {
println!("{}",i)
}
通过 push 方法可以往 v 中添加元素,我们遍历 Vector 来打印每一个元素。这里需要强调一下在 Vector 我们只能放置同一类型的元素。
v.push(10);
println!("{:?} {} {} ", &v, v.len(),v.capacity());
通过方法打印出 Vector 的长度和扩展能力,这里看到 Vector 的长度为 5 ,扩展能力为 8,
[5, 6, 7, 8, 10] 5 8
如果我们继续向 Vector 添加更多的元素,如果超出其承载能力,Vector 是按什么规律进行扩展的呢。我们可以尝试一下
v.push(10);
v.push(12);
v.push(13);
v.push(15);
v.push(16);
v.push(17);
v.push(18);
println!("{:?} {} {} ", &v, v.len(),v.capacity());
可以看到现在扩展变成 16 ,这里 Vector 是按 2 倍数进行不断扩展的。
[5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18] 11 16
我们可以用 pop 方法来获取 Vector 的最后的元素
println!("{:?}",v.pop())
这里返回值 Some 进行一层包裹,这是可选值,我们将其解构来获取 18 这个值。
Rust 从基础到实践(15) Some
Some(18)
let mut v:Vec<i32> = Vec::new();
for i in &v {
println!("{}",i)
}
println!("{:?} {} {} ", &v, v.len(),v.capacity());
println!("{:?}",v.pop())
在创建 Vector 我们可以为 Vector 指定类型,因为这里创建了一个空 Vector,所以长度和承载能力都为 0。
[] 0 0
None
#[derive(Debug)]
enum Example {
Float(f64),
Int(i32),
Text(String),
}
fn main(){
// let x = vec![1,2,3,4,5];
let r = vec![
Example::Int(120),
Example::Float(12.12),
Example::Text(String::from("hello"))
];
println!("{:?}",&r)
}
因为枚举可以看做一种类型,所以 Vector 可以接收枚举元素来实现接收多种类型元素
[Int(120), Float(12.12), Text("hello")]
网友评论