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

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> { }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值