之所以有效,是因为Iterator实现了rev(),其中selfDoubleEndedIterator:

let vec: Vec<i32> = Vec::new();
for x in vec.iter().rev() {//Do stuff
}

但是,如果我将vec.iter().rev()更改为&vec.rev(),则不会编译,因为:

no method named `rev` found for type `std::vec::Vec<i32>` in the current scope

此外:

the method `rev` exists but the following trait bounds were not satisfied: `std::vec::Vec<i32> : std::iter::Iterator`, `[i32] : std::iter::Iterator`

但是for循环不是隐式调用 IntoIterator 吗? &vecvec.iter()被认为是惯用的Rust吗?

最佳答案

如果您只是遍历Vec,那么&vec是惯用的。这是有效的,因为&Vec<T>实现了IntoIterator,这是for循环使用的功能。

但是,如果您想调用Iterator方法(例如revfilter等),则需要一个实际的Iterator(因为Vec不实现Iterator,仅实现IntoIterator)。

所以这:

for x in &vec.rev() {...
}

等效于:

for x in (&vec.rev()).into_iter() {...
}

也就是说,在尝试调用IntoIterator方法之前,没有机会使用Iterator

关于iterator - 在&vec与vec.iter()之间进行反向迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775060/

iterator - 在&vec与vec.iter()之间进行反向迭代相关推荐

  1. Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理

    Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理 翻译来源:https://gitee.com/yunwisdoms/bloom Bloom是RES ...

  2. 使用代理进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:代理 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/storyboa ...

  3. mysql 中执行的 sql 注意字段之间的反向引号和单引号

    如下的数据表 create table `test`( `id` int(11) not null auto_increment primary key, `user` varchar(100) no ...

  4. Vector反向迭代器使用

    反向迭代器 1 反向迭代器其实没什么特殊的,他只是在遍历的方向上和普通迭代器不通而已:每一个容器里面都有Iterator(迭代器),可以从容器的begin位置到end-1位置,通过++来遍历.同样也有 ...

  5. 剑指offer-按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 使用双向链表,先把当前行按顺序打印,再取出当 ...

  6. python生成器和迭代器区别

    一.迭代器/生成器基本概念 1.1 什么是迭代器 迭代器(Iterator) 是同时实现__iter__() 与 __next__() 方法的对象. 1.2 什么是生成器 Python 中,提供了两种 ...

  7. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template < class _Ty, cla ...

  8. [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template <  class _Ty,  c ...

  9. rust Vec 常用操作

    目录 Vec 声明 判空 循环遍历带下标和值 循环遍历输出 循环遍历修改 追加 删除 修改 排序-整数排序 搜索 转换 条件筛选 调整大小 比较两个vec元素的最大值 条件过滤 Vec 一种连续的可增 ...

最新文章

  1. tp5 异步处理_tp5.1 swoole 实现异步处理
  2. ylbtech-LanguageSamples-UserConversions(用户定义的转换)
  3. 判断父元素是否为顶部_元素树,检查元素是否有特定的父元素?
  4. 移动端开发碰到一个坑
  5. 附加数据时出错,有关详细信息,请单击消息。
  6. 基于Django的乐观锁与悲观锁解决订单并发问题的一点浅见
  7. 截屏录屏软件分享 FSCapture、Snipaste【目前见过的最好用的录屏软件】
  8. Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
  9. 高并发热点/单点数据_性能问题解决方案
  10. #ifdef __cplusplus extern C { #endif”的定义
  11. kafka自带的zk启动_kafka-eagle监控和管理kafka
  12. 每次编译要改名_华为突然在欧洲注册鸿蒙:正式改名方舟!与安卓竞争海外市场...
  13. 蓝桥杯省赛2016年Java组B组
  14. 穿越时空—智慧城市大数据可视化分析决策系统
  15. 【博客分享】优秀的有趣的博客
  16. Linux(2)- Linux基础命令
  17. 杰理之SRRC认证杂散超标【篇】
  18. java espresso车架_Espresso UI自动化测试框架
  19. Hoodoop-MapReduce学习
  20. ubuntu上mysql端口3306无法远程连接

热门文章

  1. 自己写的几个简单常用的脚本
  2. LibGDX游戏引擎-10-游戏地图(TiledMap)
  3. 小孩学python有意义吗-少儿编程启蒙阶段有必要报班吗?看团妈的测评
  4. mac下连接mysql数据库_mac 系统下安装MYSQL数据库
  5. 用TensorFlow训练一个物体检测器(手把手教学版)
  6. diy模块HTML怎么做,diy.html
  7. rust腐蚀网页游戏_Rust腐蚀游戏中的12个实用小技巧
  8. 温控器手动模式与自动模式c语言编写,智能节能温控器及其使用方法
  9. c语言打出五子棋棋盘的形状,跪求C语言五子棋悔棋部分实现
  10. 装了Db2 udb 8.2