我正在尝试使用with_capacity()
初始化向量后填充向量,因为在创建向量之前已知元素的数量,并且看来效率更高。
以下代码完全不填充随机值:println!("{}", v.len());
输出零。
use rand::Rng;
fn main() {
const NUMBER_OF_RANDOM_NUMBERS: usize = 10;
let mut v = Vec::with_capacity(NUMBER_OF_RANDOM_NUMBERS);
for i in &mut v {
*i += rand::thread_rng().gen_range(1, 2^32);
}
println!("{}", v.len());
}
我的想法是在let mut v = Vec::with_capacity(NUMBER_OF_RANDOM_NUMBERS)
之后,使用10个零初始化一个全新的向量,然后使用rand::thread_rng().gen_range(1, 2^32)
插入,或者我应该说给每个零添加一个随机数。
我在这里想念东西吗?
答案 0 :(得分:7)
with_capacity
不会初始化向量的值,它只是为它们分配空间。来自the documentation:
请务必注意,尽管返回的向量具有 如果指定容量,则矢量的长度为零。为 长度和容量之间差异的说明,请参阅 Capacity and reallocation。
这意味着在执行循环代码时,向量中没有任何项目,因此循环总共执行零次。结果向量没有变化。