c++ - 什么是单遍算法

标签 c++ stl iterator

当我在阅读有关 STL 迭代器的内容时​​,我在 https://www.sgi.com/tech/stl/Iterators.html 中找到了这篇笔记

The most restricted sorts of iterators are Input Iterators and Output Iterators, both of which permit "single pass" algorithms but do not necessarily support "multi-pass" algorithms.

  1. “单遍算法”是什么意思
  2. 上面这句话是什么意思

最佳答案

Iinput-iterators 是一次性迭代器,即您只能迭代一次。而前向迭代器是多遍的。

此外,对于输入迭代器,a == b 并不意味着++a ==++b。这意味着输入迭代器上的算法永远不应该尝试两次通过同一个迭代器。它们应该是单遍算法。

编辑以提供更多说明:-

输入迭代器是单遍迭代器:-

这意味着他们一次只能在列表中推进一个元素,并且一旦迭代了一个项目,就再也不会迭代了。例如,考虑一个迭代 std::cin 的输入迭代器。它会一次返回一个字符,因为它们已在输入流中准备就绪,但您永远无法“返回”到流中的前一个字符。

前向迭代器是多遍迭代器:-

这意味着您可以“返回”到前一个字符,但您不能从迭代器对象本身执行此操作

forward_iterator iter = some_list.begin();
forward_iterator iter2 = iter;

item i = *iter;  // Legal, we're using a first pass

++iter;  // Legal, moving forward
--iter;  // Illegal!  It's a forward-only iterator

item i2 = *iter2;  // Legal, we're using a second pass to read an earlier item

For input iterator this would be illegal.
item i2 = *iter2;  //Illegal

希望我清楚...

关于c++ - 什么是单遍算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322007/

相关文章:

c++ - 如何检查值是否在列表中

C++ STL unordered_map迭代器问题

c++ - 是否有等同于 macOS 上的 clone() 系统调用?

c++ - std::count 错误

c++ - borland builder c++ oracle问题

C++,实例化 std::vector 时性能不佳

c++ - C++ STD::List:遍历列表的麻烦

java - java代码中绑定(bind)异常错误的数组索引

c++ - 为包含 union 的结构定义 `swap` 方法;怎么做?

c++ - 链接 c 和 c++ 目标文件