gpt4 book ai didi

vector - 如何安全地从矢量中删除项目?

转载 作者:行者123 更新时间:2023-11-29 08:23:09 25 4
gpt4 key购买 nike

假设我有这个向量:

let mut v = vec![1,2,3];

我想从中删除一些项目:

v.remove(3);

它 panic 。我怎样才能捕获/优雅地处理这种 panic ?我尝试使用 panic::catch_unwind但它似乎不适用于向量( std::vec::Vec<i32> may not be safely transferred across an unwind boundary )。我应该在删除项目之前手动检查项目是否存在于索引中吗?

最佳答案

一般来说,vector 和 slice 方法如果接收到一个超出范围的索引,就会认为这是一个编程错误,而 Rust 中的惯例是对编程错误进行 panic 。如果您的代码出现错误,您通常需要修复代码以维护被忽略的不变量。

一些 slice 方法的变体不会因无效索引而 panic 。一个例子是索引运算符 [index],它会为索引超出范围而 panic ,而 get() 方法会返回 None如果索引超出范围。

remove() 方法没有不会 panic 的等效方法。您应该在传入索引之前手动检查索引:

if (index < v.len()) {
v.remove(index);
} else {
// Handle error
}

不过,在实际应用中,很少需要这样做。生成要删除的索引的代码通常可以编写成只产生边界内索引的方式。

关于vector - 如何安全地从矢量中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58967942/

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