iterator - 在&vec与vec.iter()之间进行反向迭代
之所以有效,是因为Iterator
实现了rev()
,其中self
是DoubleEndedIterator
:
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
吗? &vec
或vec.iter()
被认为是惯用的Rust吗?
最佳答案
如果您只是遍历Vec
,那么&vec
是惯用的。这是有效的,因为&Vec<T>
实现了IntoIterator
,这是for循环使用的功能。
但是,如果您想调用Iterator
方法(例如rev
,filter
等),则需要一个实际的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()之间进行反向迭代相关推荐
- Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理
Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理 翻译来源:https://gitee.com/yunwisdoms/bloom Bloom是RES ...
- 使用代理进行界面之间的反向传值
目标:在两个独立的控制器的界面之间进行反向传值 关键技术:代理 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/storyboa ...
- mysql 中执行的 sql 注意字段之间的反向引号和单引号
如下的数据表 create table `test`( `id` int(11) not null auto_increment primary key, `user` varchar(100) no ...
- Vector反向迭代器使用
反向迭代器 1 反向迭代器其实没什么特殊的,他只是在遍历的方向上和普通迭代器不通而已:每一个容器里面都有Iterator(迭代器),可以从容器的begin位置到end-1位置,通过++来遍历.同样也有 ...
- 剑指offer-按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 使用双向链表,先把当前行按顺序打印,再取出当 ...
- python生成器和迭代器区别
一.迭代器/生成器基本概念 1.1 什么是迭代器 迭代器(Iterator) 是同时实现__iter__() 与 __next__() 方法的对象. 1.2 什么是生成器 Python 中,提供了两种 ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cla ...
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)...
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, c ...
- rust Vec 常用操作
目录 Vec 声明 判空 循环遍历带下标和值 循环遍历输出 循环遍历修改 追加 删除 修改 排序-整数排序 搜索 转换 条件筛选 调整大小 比较两个vec元素的最大值 条件过滤 Vec 一种连续的可增 ...
最新文章
- tp5 异步处理_tp5.1 swoole 实现异步处理
- ylbtech-LanguageSamples-UserConversions(用户定义的转换)
- 判断父元素是否为顶部_元素树,检查元素是否有特定的父元素?
- 移动端开发碰到一个坑
- 附加数据时出错,有关详细信息,请单击消息。
- 基于Django的乐观锁与悲观锁解决订单并发问题的一点浅见
- 截屏录屏软件分享 FSCapture、Snipaste【目前见过的最好用的录屏软件】
- Bash字符串处理(与Java对照) - 17.判断是否以另外的字符串结尾
- 高并发热点/单点数据_性能问题解决方案
- #ifdef __cplusplus extern C { #endif”的定义
- kafka自带的zk启动_kafka-eagle监控和管理kafka
- 每次编译要改名_华为突然在欧洲注册鸿蒙:正式改名方舟!与安卓竞争海外市场...
- 蓝桥杯省赛2016年Java组B组
- 穿越时空—智慧城市大数据可视化分析决策系统
- 【博客分享】优秀的有趣的博客
- Linux(2)- Linux基础命令
- 杰理之SRRC认证杂散超标【篇】
- java espresso车架_Espresso UI自动化测试框架
- Hoodoop-MapReduce学习
- ubuntu上mysql端口3306无法远程连接
热门文章
- 自己写的几个简单常用的脚本
- LibGDX游戏引擎-10-游戏地图(TiledMap)
- 小孩学python有意义吗-少儿编程启蒙阶段有必要报班吗?看团妈的测评
- mac下连接mysql数据库_mac 系统下安装MYSQL数据库
- 用TensorFlow训练一个物体检测器(手把手教学版)
- diy模块HTML怎么做,diy.html
- rust腐蚀网页游戏_Rust腐蚀游戏中的12个实用小技巧
- 温控器手动模式与自动模式c语言编写,智能节能温控器及其使用方法
- c语言打出五子棋棋盘的形状,跪求C语言五子棋悔棋部分实现
- 装了Db2 udb 8.2