![](/img/trans.png)
[英]How to copy or borrow a reference to, an owned String inside an owned Vec?
[英]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.