gpt4 book ai didi

rust - 内置*安全*方式移出 Vec

转载 作者:行者123 更新时间:2023-11-29 07:43:21 25 4
gpt4 key购买 nike

我一直在查看文档,到目前为止我还没有看到一个内置函数可以安全地将项目移出 Vec .

Vec::get存在,但那只是借用。 Vec::remove存在,虽然它确实移出向量,但如果索引超出范围,它也会出现 panic 。所以,我有两个问题:

  1. 从向量中移动项目的预期/好的方法是什么?
  2. remove(&mut self, index: usize) -> T如果超出范围就会 panic 。 panic 的原因可能是什么?为什么不像remove(&mut self, index: usize) -> Option<T>那样实现?

最佳答案

如果你在 Rust 上下文中说安全,我们会想到内存安全。 .remove(i)在常规的 Rust 术语中肯定是安全的,只是为了澄清一下。打电话panic!()安全的

.remove(i)的错误行为和 .swap_remove(i)与使用 v[i] 索引向量相同句法:如果i越界,这是一个程序员错误,库函数 panic 。这在错误处理指南中也称为违反契约(Contract)条款。

所以库背后的想法是你只使用 v[i]v.remove(i)如果你知道 i在范围内,您确实可以检查它是否正在使用 i < v.len()v.get(i)如果你愿意的话。

还有另一个函数可以让你将一个元素从向量中移出而不用担心,那就是v.pop()。它删除向量中的最后一项,返回 Option<T>对于 Vec<T> .

关于rust - 内置*安全*方式移出 Vec<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com