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

Rust中数组与Vec调用into_iter后重复遍历为何表现不同?

数组与Vec调用into_iter()的行为差异解析

可正常运行的数组代码

fn main() {
    let v = [1, 2, 3, 4, 5];
    for _ in v.into_iter() {}
    for _ in v.into_iter() {}
}

无法编译的Vec代码

fn main() {
    let v = vec![1, 2, 3, 4, 5];
    for _ in v.into_iter() {}
    for _ in v.into_iter() {}
}

编译报错:

use of moved value: v

差异原因

  • 对于Vec<T>,into_iter()是其自身的方法,调用时会将整个Vec的所有权转移给迭代器。第一次调用后,原变量v的所有权已被转移,后续再调用就会触发“值已被移动”的错误。
  • 数组本身并没有实现into_iter()方法,调用时实际是借助自动解引用,使用了数组切片[T]的IntoIterator实现。但由于数组是栈上固定大小的数据,且只要元素实现Copy,数组就会自动实现Copy trait。每次调用into_iter()时,数组会被复制一份,原变量v的所有权并未转移,因此可以重复调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:11:08