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++ - 具有相关名称的 OpenGL 综合颜色列表

c++ - C++模板化的quickSort无法与迭代器一起使用,错误C2061

c++ - std::getline() 是否完全清空缓冲区?

c++ - std::function 可以存储指向数据成员的指针吗?

C++ - 成对映射 - 检查是否存在具有给定第一个坐标的对

c++ std::fstream 在 MacOS 上的行为

c++ - 迭代器生命周期

iterator - 仅删除符合条件的 Vec 的尾随元素

c++ - vector<unique_ptr> 使用 push_back 调整大小 - 它是如何工作的?