//vectors
下面是創(chuàng)建一個 Vector 方法卡者,我們也可以可以調(diào)用 Vect::new 方法來創(chuàng)建一個空的 Vector室囊。
fn main(){
let x = vec![1,2,3,4,5];
}
在 c++ 中的 vec 本質(zhì)是模板,而在 Rust 中 Vector 是宏揖曾,有關(guān)宏的概念比較高級我們在以后內(nèi)容來分享尾序,這里大家需要了解到 vector 有兩個參數(shù)表示 vector 的承載能力,一個是 Vector 的長度迷郑,一個是 Vector 擴展能力枝恋,所謂的擴展能力就是預(yù)留多少內(nèi)存給 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 來打印每一個元素焚碌。這里需要強調(diào)一下在 Vector 我們只能放置同一類型的元素。
v.push(10);
println!("{:?} {} {} ", &v, v.len(),v.capacity());
通過方法打印出 Vector 的長度和擴展能力霸妹,這里看到 Vector 的長度為 5 十电,擴展能力為 8,
[5, 6, 7, 8, 10] 5 8
如果我們繼續(xù)向 Vector 添加更多的元素叹螟,如果超出其承載能力鹃骂,Vector 是按什么規(guī)律進行擴展的呢。我們可以嘗試一下
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());
可以看到現(xiàn)在擴展變成 16 罢绽,這里 Vector 是按 2 倍數(shù)進行不斷擴展的畏线。
[5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18] 11 16
我們可以用 pop 方法來獲取 Vector 的最后的元素
println!("{:?}",v.pop())
這里返回值 Some 進行一層包裹,這是可選值良价,我們將其解構(gòu)來獲取 18 這個值象踊。
Rust 從基礎(chǔ)到實踐(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())
在創(chuàng)建 Vector 我們可以為 Vector 指定類型,因為這里創(chuàng)建了一個空 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 可以接收枚舉元素來實現(xiàn)接收多種類型元素
[Int(120), Float(12.12), Text("hello")]