日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Rust那些事之Vector妙用

?導(dǎo)語(yǔ)

我們知道vector是一個(gè)動(dòng)態(tài)數(shù)組,在C++中來(lái)說(shuō),vector中存儲(chǔ)的只能是一種類型,那如何做到存儲(chǔ)多個(gè),無(wú)非就是包一層,例如:結(jié)構(gòu)體、void*。而在Rust中enum非常獨(dú)特,每個(gè)值可以是不同類型,因此我們從enum來(lái)考慮。另一方面,幾種不同的方式從vector中讀取有何不同呢?

成都創(chuàng)新互聯(lián)長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為陽(yáng)江企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,陽(yáng)江網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

1.vector實(shí)例

例如:一個(gè)enum包含了不同類型

#[derive(Debug)]
enum Spec {
Int(i32),
Float(f64),
Bool(bool),
Text(String),
}

調(diào)用:

pub fn mult_type()  {
let r = vec![Spec::Int(1), Spec::Float(2.2), Spec::Bool(true), Spec::Text(String::from("hello"))];
println!("{:?}", r)
}

這樣便可以簡(jiǎn)單的完成一個(gè)vector使用不同類型。

2.&實(shí)例

vector中,你可以取其中的元素,有下面幾個(gè)方法:

v[2]
&v[2]
v.get(2)

這三個(gè)有什么區(qū)別?

前兩個(gè)很明顯,跟傳統(tǒng)的獲取元素一致,如果下標(biāo)越界,便會(huì)panic,而get使用了Option特殊枚舉,在越界情況下會(huì)返回None,不會(huì)panic,足以說(shuō)明Rust的安全性。

因?yàn)関.get返回的是Option,我們可以使用match控制流,提取出包裹的內(nèi)容。

match v.get(2) {
Some(x) => println!("{}", x),
None => println!("None")
}

接下來(lái),我們考慮v[2]與&v[2]的區(qū)別。

// case1: &
let mut v = vec![1, 2, 3, 4, 5];
let first = &v[0];
v.push(6);
println!("The first element is: {}", first);

// case2: plain
let mut v = vec![1, 2, 3, 4, 5];
let first = v[0];
v.push(6);
println!("The first element is: {}", first);

考慮上述兩個(gè)case,在push的時(shí)候哪個(gè)case是正常的?

答案是第二個(gè)case會(huì)正常運(yùn)行,第一個(gè)case由于&的影響,會(huì)報(bào)錯(cuò)。

在 vector 的結(jié)尾增加新元素時(shí),在沒(méi)有足夠空間將所有元素依次相鄰存放的情況下,可能會(huì)要求分配新內(nèi)存并將老的元素拷貝到新的空間中。這時(shí),第一個(gè)元素的引用就指向了被釋放的內(nèi)存。借用規(guī)則阻止程序陷入這種狀況。

此時(shí)便會(huì)報(bào)錯(cuò):error: cannot borrow v as mutable because it is also borrowed as immutable。


名稱欄目:Rust那些事之Vector妙用
文章URL:http://www.dlmjj.cn/article/coohjcp.html