2015-08-17 16 views
0

基本上我需要製作一個結構,其中包含VecDequeState s。到目前爲止我的代碼:如何使用通用VecDeque?

type State = [[bool]]; 
pub struct MyStruct { 
    queue: VecDeque<State>, 
} 
impl MyStruct {...} 

當編譯此代碼我

error: the trait `core::marker::Sized` is not implemented for the type `[[bool]]` [E0277] 
note: `[[bool]]` does not have a constant size known at compile-time 

結束時,我想的是,在隊列中有State是不是好主意好,所以我想引用隊列(這也適合我的申請)。

​​

在這種情況下,更奇怪的錯誤occures:

error: missing lifetime specifier [E0106] 

如何爲了工作我寫了上面的方式創建這樣的結構呢?我真的不是Rust專家。

回答

5

基本問題是[[bool]]沒有意義[bool]dynamically sized,並且您不能擁有一個動態大小的值的數組,因此[[bool]]是不可能的。

這並不完全清楚你要在這裏完成什麼。最明顯的解決辦法是隻使用Vec代替:

pub struct MyStruct { 
    queue: VecDeque<Vec<Vec<bool>>>, 
} 

至於你「更奇怪的錯誤」,即建​​議,我認爲你沒有看過的Rust Book,特別是chapter on Lifetimes。爲了編寫一個包含借來的指針的結構,你需要來指定生存期()。

+0

感謝您的回答,我打算做一個固定大小的2D布爾數組。我需要最大。訪問速度,因此我嘗試了C/C++使用的常規數組。 Vec快嗎? – petrbel

+1

如果你想要一個固定大小的數組,可以使用一個固定大小的數組(比如'[bool; 32]')。 'Vec'只是一個動態大小的連續數組,就像C++中的'std :: vector'一樣。類似Rust中的'[bool]'在C/C++中有* no *等價物;它根本不能用這些語言來表達。像'bool []''這樣的原始數組在Rust中並不具有完全相同的效果,因爲它們基本上是不安全的。最接近的是像'&[bool]'這樣的借用數組。但是,真的,只要使用'Vec',除非分析顯示它是一個問題。 –

+0

如果你擔心速度,你不應該使用雙重間接。 [嘗試展開它。](http://is.gd/SC0eNa)如果使用固定長度的堆棧數組,這並不重要,但是。 – Veedrac