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

Rust求众数代码报错E0515: cannot return value referencing temporary value

Rust E0515报错(返回临时值引用)解决方案

错误根因

  1. 遍历哈希表时使用了occurrences.clone().iter(),此处clone()生成的哈希表是临时变量,当前for循环语句执行结束就会被销毁。你把这个临时哈希表内的元素引用存入mode向量返回,相当于返回了指向已销毁内存的悬垂引用,触发了Rust的借用规则检查,这是报错的直接原因。
  2. 返回值类型Vec<&&i32>设计不合理,i32是实现了Copy trait的基础类型,直接返回持有值的向量即可,不需要传递多重引用,徒增生命周期管理成本。
  3. 额外隐患:你用来存储最高出现次数的n向量初始为空,第一次执行occ > n[0]时会直接触发索引越界panic。

修改方案

  • 把返回值类型改为Vec<i32>,直接返回众数的数值,避免引用生命周期问题
  • 去掉多余的clone()调用,直接遍历原哈希表的迭代器
  • 用单个i32变量存储最高出现次数,替换原来的向量,避免空索引问题

修改后的完整代码:

use std::collections::HashMap;

fn mode(vector: &Vec<i32>) -> Vec<i32> {
    let mut occurrences = HashMap::new();
    let mut max_count = 0;
    let mut mode = Vec::new();

    for i in vector {
        let j = occurrences.entry(i).or_insert(0);
        *j += 1;
    }

    for (num, occ) in occurrences.iter() {
        if occ > &max_count {
            max_count = *occ;
            mode.clear();
            mode.push(**num);
        } else if occ == &max_count {
            mode.push(**num);
        }
    }

    mode
}

fn main() {
    let mut numbers: Vec<i32> = vec![1,5,2,2,5,3];
    numbers.sort();
    
    println!("the mode is {:?}:", mode(&numbers));
}

执行后输出the mode is [2, 5]:,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:00