You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当向量v可能为空时,如何正确遍历0..v.len()-1区间?

解决空向量时0..v.len()-1的溢出问题(保持原逻辑不变)

原代码在向量为空时,v.len()-1会触发无符号整数(usize)的下溢panic,因为0usize - 1不符合无符号整数的取值范围。要在不改变原逻辑、不使用有符号整数、不单独判断空向量的前提下修复这个问题,可以利用Rust无符号整数的saturating_sub方法:

修改后的代码:

fn main() {
    let v: Vec<i32> = vec![]; // 可替换为vec![5, 6, 7]测试正常场景
    for i in 0 .. v.len().saturating_sub(1) {
        for j in i + 1 .. v.len() {
            println!("{} {}", v[i], v[j]);
        }
    }
}

方案说明:

  • 正常场景(向量非空):v.len().saturating_sub(1)等价于v.len() - 1,完全保留原循环的遍历范围和逻辑,输出结果与原代码一致;
  • 空向量场景:0usize.saturating_sub(1)会返回0,此时循环范围变为0..0,外层循环直接跳过,不会执行任何迭代,自然避免了溢出panic,也符合空向量无两两组合的预期。

该方案完全满足要求:

  • 未改变原程序的结构与逻辑;
  • 全程使用无符号整数,无类型转换;
  • 无需额外判断向量是否为空,仅通过原生方法简洁处理边界情况。

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:06:28