簡體   English   中英

如何通過引用傳遞擁有的數組

[英]How to pass an owned array by reference

我只是第一次玩弄銹,實現了快速排序,而且還停留在對動態大小數組的引用上(固定大小數組沒有問題)。

我希望有一個不確定大小的整數數組來排序,我可以用以下類似的方式創建該數組:

let array = ~[1,2,3,4,3,2,1];

但是,我不確定如何通過引用將其傳遞給分區函數。

partition ( a : &mut ~[uint], p: uint, i: uint) {
     // partition a, in place
}

一旦我嘗試對a中的任何元素重新排序,編譯器就會抱怨:

錯誤:無法分配給不變的vec內容a[..]

您應該使用向量的可變借用,而不是向量的指針的可變借用,因此您應該在分區函數的類型中擺脫該~指針。 例如:

fn partition(_: &mut [uint], _: uint, _: uint) { }

fn main() {
    let mut array = ~[1, 2, 3, 4, 3, 2, 1];
    partition(array, 0, 0);
}

請注意, array作為可變的借入指針自動傳遞。

如果改用Vec ,則需要顯式創建一個切片:

fn partition(_: &mut [uint], _: uint, _: uint) { }

fn main() {
    let mut array = vec!(1, 2, 3, 4, 3, 2, 1);
    partition(array.as_mut_slice(), 0, 0);
}

這兩個代碼片段都應在最新的Rust上編譯(摘自技巧)。

使用0.10時,該語言目前正在對數組類型進行一些更改,因此情況有些混亂。 Vec<T>是Rust預期的動態大小的數組類型。

let vec = vec!(1u,2,3,4,3,2,1);

partition ( a : &mut Vec<uint>, p: uint, i: uint) {
     // partition a, in place
}

請注意,目前只有通過首先在其上調用.as_slice()或.as_mut_slice()才能通過括號對Vec進行索引,因為尚未實現各個特征。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM