首页 > 解决方案 > 如何填充具有预定义容量的向量?

问题描述

我试图在初始化向量后填充它,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)插入,或者我应该说,为每个零添加一个随机数。

我在这里错过了什么吗?

标签: rust

解决方案


with_capacity不初始化向量的值,它只是为它们分配空间。从文档中

需要注意的是,尽管返回的向量具有指定的容量,但向量的长度为零。有关长度和容量之间差异的说明,请参阅 容量和重新分配

这意味着当你的循环代码被执行时,向量中没有任何项目,因此它总共循环了零次。导致向量没有变化。


推荐阅读