美文网首页
rust中的迭代器

rust中的迭代器

作者: 梁帆 | 来源:发表于2021-10-29 16:22 被阅读0次

迭代器模式,就是指对一系列项执行某些任务。

一、迭代器的作用

迭代器(iterator)负责:

1、遍历每个项

2、确定序列遍历何时完成

在标准库中没有提供迭代器的语言中,我们可能会使用一个从 0 开始的索引变量,使用这个变量索引 vector 中的值,并循环增加其值直到达到 vector 的元素数量。迭代器为我们处理了所有这些逻辑,这减少了重复代码并消除了潜在的混乱。另外,迭代器的实现方式提供了对多种不同的序列使用相同逻辑的灵活性,而不仅仅是像 vector 这样可索引的数据结构。

首先要注意的是,rust中的迭代器是惰性的,即除非你去调用消耗迭代器的方法,否则迭代器本身没有任何效果。

如下面一个使用迭代器的例子:

使用迭代器

当我们创建迭代器没有用它的时候,这段代码并没有任何用处:

let v1_iter = v1.iter();

即迭代器被储存在 v1_iter变量中,而这时没有进行迭代。

一旦 for 循环开始使用 v1_iter,迭代器才发生作用。

二、迭代器的实现

1、Iterator trait和next方法

迭代器都实现了一个叫做 Iterator 的定义于标准库的 trait。

注意这里有一下我们还未讲到的新语法: type Item 和 Self::Item ,他们定义了 trait 的 关联类型(associated type)。现在只需知道这段代码表明实现 Iterator trait 要求同时定义一个 Item 类型,这个 Item 类型被用作 next 方法的返回值类型。换句话说,Item 类型将是迭代器返回元素的类型。

next 是 Iterator 实现者被要求定义的唯一方法。 next 一次返回迭代器中的一个项,封装在 Some 中,当迭代器结束时,它返回 None 。迭代器中的next方法也可以直接调用,如下:

2、消费迭代器的方法

Iterator trait 有一系列不同的由标准库提供默认实现的方法;你可以在 Iterator trait 的标准库 API 文档中找到所有这些方法。一些方法在其定义中调用了 next 方法,这也就是为什么在实现 Iterator trait 时要求实现 next 方法的原因。这些调用 next 方法的方法被称为 消费适配器(consuming adaptors),因为调用他们会消耗迭代器。一个消费适配器的例子是 sum 方法。这个方法获取迭代器的所有权并反复调用next 来遍历迭代器,因而会消费迭代器。当其遍历每一个项时,它将每一个项加总到一个总和并在迭代完成时返回总和。

要注意的是,调用sum方法之后就无法使用v1_iter了,因为调用sum方法时该方法会获得迭代器的所有权。

3、产生其他迭代器的方法

Iterator trait 中定义了另一类方法,被称为 迭代器适配器(iterator adaptors),他们允许我们将当前迭代器变为不同类型的迭代器。可以链式调用多个迭代器适配器。不过因为所有的迭代器都是惰性的,必须调用一个消费适配器方法以便获取迭代器适配器调用的结果。

相关文章

  • rust中的迭代器

    迭代器模式,就是指对一系列项执行某些任务。 一、迭代器的作用 迭代器(iterator)负责: 1、遍历每个项2、...

  • Rust for cpp devs - 迭代器

    迭代器(Iterator)可以允许对序列中的每一个元素执行某个操作。 Rust 的迭代器分为三种: iter() ...

  • Rust语言编程实例100题-074

    Rust语言编程实例100题-074 题目:Rust迭代器专项练习。迭代器模式是将遍历数据集合的行为抽象为单独的迭...

  • Rust语言编程实例100题-075

    Rust语言编程实例100题-075 题目:Rust迭代器专项练习。迭代器模式是将遍历数据集合的行为抽象为单独的迭...

  • Rust语言编程实例100题-076

    Rust语言编程实例100题-076 题目:Rust迭代器专项练习。迭代器模式是将遍历数据集合的行为抽象为单独的迭...

  • Rust语言编程实例100题-077

    Rust语言编程实例100题-077 题目:Rust迭代器专项练习。迭代器模式是将遍历数据集合的行为抽象为单独的迭...

  • Rust语言编程实例100题-078

    Rust语言编程实例100题-078 题目:Rust迭代器专项练习。迭代器模式是将遍历数据集合的行为抽象为单独的迭...

  • Python 中的迭代器

    Python 中的迭代器 Python 3中的迭代器 容器与迭代器 在Python 3中,支持迭代器的容器,只要支...

  • 10.迭代器与生成器

    一、迭代器 1). 迭代器概述 类比Java中的迭代器,参考迭代器模式https://www.jianshu.co...

  • 设计模式 | 迭代器模式及典型应用

    本文的主要内容: 介绍迭代器模式 源码分析迭代器模式的典型应用Java集合中的迭代器模式Mybatis中的迭代器模...

网友评论

      本文标题:rust中的迭代器

      本文链接:https://www.haomeiwen.com/subject/dvjoyltx.html