文章目录

  • iter()
  • into_iter()
  • 对比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> { }

Rust中iter()和into_iter()的区别相关推荐

  1. Rust中的iter(), into_iter(), iter_mut()

    在Rust中,iter(), into_iter(), iter_mut()都是用于在集合类型上创建迭代器的方法.这三个方法各有不同,下面一一进行介绍. iter(): iter() 方法创建一个不可 ...

  2. java iter是否存在_Java中ListIterator和Iterator的区别以及ListIterator的应用

    Java中ListIterator和Iterator详解与辨析 在使用java集合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.Arra ...

  3. 17.Rust中函数式语言功能:迭代器与闭包

    Rust 的设计灵感来源于很多现存的语言和技术.其中一个显著的影响就是 函数式编程(functional programming).函数式编程风格通常包含将函数作为参数值或其他函数的返回值.将函数赋值 ...

  4. python yield用法_Python中迭代器和生成器的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  5. Draconian,自由或保姆状态:Java,C#,C,C ++,Go和Rust中的并发意识形态

    为什么我们需要并发 (Why we need Concurrency) Once, there was a good old time when clock speed doubled every 1 ...

  6. rust全息要啥才能做_在 Rust 中不能做什么

    编者注:上周 Armin 在自己的博客上首次发布了这个版本.如果你想再次阅读这篇文章,或者想看看 Armin 还在做什么,一定要去看看. 去年一直很有趣,因为我们用 Rust 建造了很多好东西,并且这 ...

  7. rust笔记7 rust中的包管理

    rust相比于C++,一个优势在于有一个现代化的包管理系统,我们不用搞各种命令空间和依赖的问题.这里主要记录了一般文件打包的方式. rust中声明包的关键字是mod,如果是公共的,则需要声明为pub ...

  8. [转载] Python中生成器和迭代器的区别

    参考链接: Python迭代器 Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list.string.tuple.dict等这些容器对 ...

  9. mqtt客户端工具_如何在 Rust 中使用 MQTT

    Rust 是由 Mozilla 主导开发的通用.编译型编程语言.该语言的设计准则为:安全.并发.实用,支持 函数式.并发式.过程式以及面向对象的编程风格.Rust 速度惊人且内存利用率极高.由于没有运 ...

  10. Rust 中的指针:Box、Rc、Cell、RefCell

    Rust 中的指针:Box.Rc.Cell.RefCell 作者:许野平 2022-02-21 Rust 自身具有 &.* 操作符,可以实现变量引用和解引用.为什么又搞出这几个类型的指针呢?原 ...

最新文章

  1. 英语语法---副词详解
  2. Java格式化日期和时间模式占位符
  3. Docker日志大小限制
  4. linux中postscript如何生成,【转载】如何为Linux生成和打上patch
  5. MySql学习15----MySql日志
  6. YUI Compressor
  7. RFID开发利器 proxmark3
  8. 好程序员技术分析JavaScript闭包特性详解
  9. MyBatis框架generatorSqlmapCustom自动生成及下载方法
  10. MySQL某列增加标注_MySQL 使用CASE表达式给行做标记
  11. oracle如何修改initial参数,oracle初始化参数设置
  12. Java并发编程实战 -- 读书笔记
  13. 关于vs2017如何配置和运行龙书DX9案例
  14. 怎么在线批量网站打开?
  15. 基于springboot高校社团管理系统
  16. 罗永浩回顾创业历程:转角遇贵人
  17. 学习速写的方法有哪些?如何快速学会速写?
  18. 天津出差系列(五)----第五天
  19. CodeForces - 768B Code For 1(找规律)
  20. iPh oto的删除动画

热门文章

  1. Digging Into Self-Supervised Monocular Depth Estimation(2019.8)
  2. Vue实现表格的分页打印和导出Excel功能
  3. 盯盯拍罗勇:公司就是我最好的产品
  4. java编写九宫格拼图游戏_js实现九宫格拼图小游戏
  5. java打印长方形、平行四边形、三角形、菱形
  6. adb 连接某个wifi_adb wifi 测试(无需root)
  7. 【入门级】Hibernate环境搭建
  8. 在线微信公众号调查数据分析报告
  9. 关于异业联盟和O2O商业模式的一些想法
  10. M2M技术的基本框架