小编Dmi*_*try的帖子

当 v 可能为空时如何循环 0 .. v.len() - 1 ?

0 .. v.len() - 1当向量v可能为空时,正确的循环方法是什么?

考虑以下代码,它打印向量中 2 个元素的所有选择[5, 6, 7]

fn main() {
  let v: Vec<i32> = vec![5, 6, 7];
  for i in 0 .. v.len() - 1 {
    for j in i + 1 .. v.len() {
      println!("{} {}", v[i], v[j]);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它打印

5 6
5 7
6 7
Run Code Online (Sandbox Code Playgroud)

正如预期的那样。

现在,如果我们有

let v: Vec<i32> = vec![];
Run Code Online (Sandbox Code Playgroud)

那么程序就会因为溢出而出现恐慌,这也是意料之中的。

:如何在不改变程序结构和逻辑、不涉及有符号整数的情况下修复它?

以下是我不想要的解决方法的一些示例:

  • 单独处理空v(改变逻辑)。总的来说,我不想要任何v空支票,例如if v.len() == 0 { 0 } …

integer-overflow unsigned-integer rust

4
推荐指数
1
解决办法
165
查看次数

标签 统计

integer-overflow ×1

rust ×1

unsigned-integer ×1