[英]Vector of tuples with different size
我目前正在使用 Rust 實施行進立方體算法,我遇到了一個問題。 該算法需要使用我從GitHub復制的三角表。但是Rust中的哪個數據結構允許我們存儲這樣的數據?
這些元組意味着立方體的哪些邊必須連接,所以它們的大小都不同。
pub fn tri_table()-> Vec<???>
{
return vec![
(),
(0, 8, 3),
(0, 1, 9),
(1, 8, 3, 9, 8, 1),
(1, 2, 10),
(0, 8, 3, 1, 2, 10),
(9, 2, 10, 0, 2, 9),
(2, 8, 3, 2, 10, 8, 10, 9, 8),
(3, 11, 2),
(0, 11, 2, 8, 11, 0),
(1, 9, 0, 2, 3, 11),
(1, 11, 2, 1, 9, 11, 9, 8, 11),
(3, 10, 1, 11, 10, 3),
(0, 10, 1, 0, 8, 10, 8, 11, 10),
(3, 9, 0, 3, 11, 9, 11, 10, 9),
(9, 8, 10, 10, 8, 11),
(4, 7, 8),
...
];
}
聽起來你的三角測量表在編譯時是已知的。 在這種情況下,使用 static 個切片。 這是成本最低的解決方案,它的開銷幾乎為零。 對於以后不能再修改的價格。
像這樣:
pub fn tri_table() -> &'static [&'static [i32]] {
&[
&[],
&[0, 8, 3],
&[0, 1, 9],
&[1, 8, 3, 9, 8, 1],
&[1, 2, 10],
&[0, 8, 3, 1, 2, 10],
&[9, 2, 10, 0, 2, 9],
&[2, 8, 3, 2, 10, 8, 10, 9, 8],
&[3, 11, 2],
// ...
]
}
通過這樣做,數據將直接烘焙到可執行文件的數據段中,調用tri_table()
僅返回指向它的指針,不會發生分配,也不會使用堆 memory。 多次調用tri_table()
將始終返回對同一地址的引用,因此如果多次調用它也不會產生開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.