如何填充具有预定容量的向量?

时间:2019-03-14 12:51:45

标签: rust

我正在尝试使用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)插入,或者我应该说给每个零添加一个随机数。

我在这里想念东西吗?

1 个答案:

答案 0 :(得分:7)

with_capacity不会初始化向量的值,它只是为它们分配空间。来自the documentation

  

请务必注意,尽管返回的向量具有   如果指定容量,则矢量的长度为零。为   长度和容量之间差异的说明,请参阅   Capacity and reallocation

这意味着在执行循环代码时,向量中没有任何项目,因此循环总共执行零次。结果向量没有变化。