vector向量是一種可以動(dòng)態(tài)或“可增長(zhǎng)”的數(shù)組,被實(shí)現(xiàn)為標(biāo)準(zhǔn)庫(kù)類型Vec<T>荸恕。vector總是在堆上分配數(shù)據(jù)。
1.常規(guī)用法
vector將他們的內(nèi)容以連續(xù)存儲(chǔ)在堆上,這意味著他們必須在編譯時(shí)就知道T的大小糖埋。但是有些類型不可能再編譯時(shí)就能夠確定其大小,為此你需要保存一個(gè)指向該類型的指針:Box類型就適合這種情況窃这。
let v:Vec<i32> = vec![1, 2, 3, 4, 5];
let v2:Vec<i32> = vec![0; 10];//10個(gè)i32數(shù)據(jù)類型的0
- 訪問(wèn)語(yǔ)法
要返回特定索引位置的值的話瞳别,那么使用[],和數(shù)組類似杭攻;元組使用.
let v:Vec<i32> = vec![1,2,3,4,5];
println!("{}", v[2]);
- 需要注意的地方:索引的數(shù)據(jù)類型必須為usize祟敛。下面舉一個(gè)例子:
fn main(){
let v:Vec<i32> = vec![1,2,3];
let index:usize = 2;
println!("{}", v[index]);
}
如果你嘗試?yán)靡粋€(gè)非usize的索引去獲取向量的值的話,那么將會(huì)拋出一個(gè)錯(cuò)誤兆解。
- 迭代:可以利用for...in...來(lái)迭代一個(gè)vector里面的元素馆铁。
var v:Vec<i32> = vec![1,2,3,4,5];
for value in v{
println!("{}", value);
}
需要注意的是,在使用vector的所有權(quán)遍歷之后再次遍歷它會(huì)出錯(cuò)痪宰。但是我們可以多次使用vector變量的引用進(jìn)行多次遍歷叼架。
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`
}
但是對(duì)他的引用進(jìn)行多次遍歷還是可以的:
var v:Vec<i32> = vec![1,2,3,4];
for value in &v{
println!("{}", value);
}
for value in &v{
println!("{}",value);
}