Rust中iter()和into_iter()的区别

本文对比了Rust语言中iter()和into_iter()两种不同类型的迭代器。iter()返回一个借用迭代器,允许遍历集合而不改变其内容;into_iter()则返回一个消费型迭代器,遍历时获取元素的所有权,并且原始集合不再可用。文章通过具体示例解释了这两种迭代器的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

i32列表为例:

let nums = vec![1,2,3,4];

iter()

通过iter()调用得到的迭代器,其中迭代的是nums数组元素的的引用(借用)

// 可以看到,闭包中的参数x前面带有引用&符号
let borrowed_values = nums.iter().for_each(|&x| {
    println!("{}", x);//x为i32类型
});

into_iter()

通过into_iter()调用得到的迭代器,其中迭代的是nums数组元素本身(占据所有权)。
调用nums.into_iter()之后,nums变量的所有权会被转移走,无法再次使用nums

let nums = vec![1,2,3,4];
// 迭代器中迭代的是nums数组中元素本身(占据所有权)
let owned_values = nums.into_iter().for_each(|x| {
    println!("{}", x);
});
// 下面这行代码编译不过:borrow of moved value: `nums`,即nums所有权已被转移走
println!("{:?}", nums);

对比iter()和into_iter()函数签名

对比函数签名,iter()中传入的是self的引用into_iter()中传入的是self本身,会将所有权转移到此函数调用内部。

pub fn iter(&self) -> Iter<'_, T> { }
fn into_iter(self) -> IntoIter<T, A> { }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值