当我推入超过Vec容量的元素时,为什么没有错误?

阿什尼乌123

我遇到了这个潜在的错误:

#[derive(Debug)]
enum StackType {
    Int(i64),
    Float(f64),
    Word(String),
}

fn main() {
    let mut stack: Vec<StackType> = Vec::with_capacity(1);
    stack.push(StackType::Int(5));
    stack.push(StackType::Float(5_f64));
    stack.push(StackType::Word(String::from("ABC")));
    println!("{:?}", stack);
}

我在Windows 10上使用Rust v1.26.0(a77568041 2018-05-07)

当我编译并运行上述程序时,由于指定的容量为1,并且使用了3次push,但输出正确,所以我会期望出现错误:

[Int(5), Float(5.0), Word("ABC")]
豪尔赫·以色列·佩尼亚

Vec可以动态增长,类似于C ++的std::vector您指定的事实with_capacity只是意味着它可以容纳许多元素而无需重新分配。请参阅有关文档Vec::with_capacity

构造一个新的Vec<T>具有指定容量的容器。

该向量将能够完全保留capacity元素而无需重新分配。如果capacity为0,则不会分配向量。

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

这是的容量和重新分配Vec文档的摘录

向量的容量是为将添加到向量上的任何将来元素分配的空间量。请勿将其与向量长度混淆,后者指定了向量中实际元素的数量。如果向量的长度超过其容量,则其容量将自动增加,但必须重新分配其元素。

例如,容量为10且长度为0的向量将是一个空向量,具有10个以上元素的空间。将10个或更少的元素推到向量上不会改变其容量或引起重新分配。但是,如果向量的长度增加到11,则必须重新分配,这可能会很慢。因此,建议尽可能使用Vec::with_capacity指定向量的大小。

这不同于固定长度的数组,该长度不能超过指定的长度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么当我给 R 中的两个列表元素赋予相同的名称时没有错误

当我向django添加新语言时,没有错误,但没有显示我的翻译。为什么?

为什么当我输入超过 15000 个参数时 postgresql 使用 100% cpu

当我没有超过每日免费请求数时,为什么仍然出现错误MAX_ELEMENTS_EXCEEDED?

当我尝试扩展模型属性时,为什么Visual Studio 2013调试器没有错误地关闭?

为什么当我引用未用“ @ + id”标记的ID时,为什么没有出现错误?

当我的输入变量超过 1 个字符时,为什么我没有得到任何结果?

当我尝试使用Hibernate删除实体时,没有错误消息但没有删除

当我使用命令帮助和状态时,为什么mysql为什么说我的SQL语法有错误?

当我将数字视为数组时,为什么没有 Typescript 编译错误?

为什么当我的IDE没有时,javac会抛出编译错误?

当我涵盖了这些情况时,为什么在遍历树中没有类型错误?

为什么我的.bashrc有错误?

当我尝试从不存在的HashSet中删除元素时,为什么它没有给出运行时错误?

为什么当我尝试从C ++调用python函数时为什么出现“没有attirubute错误”

为什么我的注册表写报告没有错误但没有效果?

当我通过它的 ID 调用它时,为什么我没有得到这个元素的内容?

我现在没有,为什么我在这个 sql 请求中有错误

为什么CUDA 8.0(有时)有错误的内存访问权限,而7.5没有?

我没有错误,但为什么我的应用程序闭上

为什么错误处理程序触发时没有错误?

当我输入超出范围的数字时,为什么它不返回任何类型?

编译时没有错误代码,但屏幕上没有数据表,我无法弄清为什么

在C#中执行SQL查询时出错,当我手动输入它时没有错误

当我们尝试将变量除以零时,为什么编译器没有显示错误

为什么会出现错误:超出最大更新深度。当我没有无限循环时?

当我在 Python 类中定义局部函数时,为什么会出现“对象没有属性”错误?

当我错过C中的动态内存分配时,为什么没有编译错误?

当我没有变量或任何其他命名的变量时,为什么会出现错误“与 'operator==' 不匹配”?