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

Rust中如何正确将&mut i32转换为usize?代码报错咨询

问题解答

你遇到的报错是因为遍历&mut Vec<i32>类型变量时,for循环生成的迭代元素是可变引用&mut i32,而非i32值,直接将引用类型转换为usize不符合Rust的类型规则。以下是几种正确的处理方式:

方法1:解引用可变引用

通过*操作符解引用&mut i32,获取内部的i32值后再转换为usize:

pub fn sort_colors(nums: &mut Vec<i32>) {
    let mut cntColors = vec![0; 3];
    
    for num in nums {
        cntColors[*num as usize] += 1; // 用*解引用拿到i32值
    }
}

注:Rust中一元解引用*的优先级高于类型转换as,所以*num as usize等价于(*num) as usize,两种写法都有效。

方法2:遍历不可变引用

如果不需要修改原数组元素,可以用iter()方法获取不可变引用的迭代器,同样通过解引用取值:

pub fn sort_colors(nums: &mut Vec<i32>) {
    let mut cntColors = vec![0; 3];
    
    for num in nums.iter() {
        cntColors[*num as usize] += 1;
    }
}

你用索引遍历的修复方式nums[idx]本质是通过索引直接访问数组元素(Rust会自动解引用),也是合法实现,但使用迭代器的写法更符合Rust的惯用风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:49:55