我将一个大小为3的数组类型命名为Sequence
。从这种类型的对象中,Vec
的条目将由有限自动机连续计算。自动机运行后,Vec
保证包含Sequence
(=3)的长度,或者在某些情况下多一个(=4)项。
我尝试使用Vec::with_capacity
来使Vec
适应最大可能的内存需求(=4)。为了避免无用的分配和丢弃Vec
,我想在任何Sequence
对象到达之前分配一次:
type Sequence = [ f64; 3 ];
fn main() {
let mut accumulator: Vec<f64> = Vec::with_capacity( Sequence.len() + 1 );
…
}
当然,这段代码不会编译,因为.len()
只对示例有效,而对类型无效。但是在这个准备阶段,没有具体的Sequence
变量。
我想避免一个难以阅读的类似C的结构,它的形式如下:
use std::mem::size_of;
type Sequence = [ f64; 3 ];
fn main() {
let mut accumulator: Vec<f64> = Vec::with_capacity( size_of::<Sequence>() / size_of::<f64>() + 1 );
}
我的类型应该保持非常简单;对于泛型,我在这里读到了一个类似问题的很好的答案:但是我想知道对于我的非常直接的类型Sequence
,是否有比定义一个泛型trait更简单的方法来完成这项工作。
例如,我知道我可以定义一个const
并使用它,但这似乎会将类型信息从类型中分离出来;如果生 rust 允许的话,我想避免这种情况:
const SEQUENCE_LEN: usize = 3;
type Sequence = [ f64; SEQUENCE_LEN ];
fn main() {
let mut accumulator: Vec<f64> = Vec::with_capacity( SEQUENCE_LEN + 1 );
}
出于同样的原因,当它们属于一起时,将它们保持在一起,我不想简单地使用像with_capacity(4)
中的文字。
1条答案
按热度按时间kmpatx3s1#
我觉得这不太好,但另一个选择是
在释放模式下,它编译为与