输入与输出迭代器 - 命名约定

时间:2011-09-04 12:37:50

标签: c++ iterator naming-conventions

我只想试着理解C ++中 InputIterator OutputIterator 的实际情况。现在,直到现在,我一直认为我总是知道输入输出的定义也适用于迭代器。

这意味着输入是“放入某个东西”,这意味着你可以写入迭代器,就像在迭代器中放入一样。

输出是“放在某个地方”,这对我来说总是意味着,要写入屏幕或坚持变量。

现在结果是我们的朋友Iterators,另一方面, InputIterator 用于对元素序列的只读访问,这似乎应该被称为“输出“,因为您使用这种类型的迭代器将std::vector<int>的元素写入std::cout,例如。

OutputIterator 原来是一个只写访问权限。

我想知道,如果有人能给出一个合理的解释,我会发现迭代器类型的命名很奇怪吗?

2 个答案:

答案 0 :(得分:8)

这只是一个惯例问题。 “输入”和“输出”被理解为关于环境的“从”/“到”,而不是关于您的程序;或者在另一个方向,作为关于你的程序的“进/出”,而不是环境。

因此,“输入”从环境中获取,并使其可用于您的程序,例如istreamread。 “输出”会将您程序中的某些内容放回到环境中,例如ostreamwrite

迭代器遵循相同的方向,输入迭代器使程序可用范围内的数据,而输出迭代器将程序中的数据放入范围。


您可能会想到的方式是“输入”是您的程序应该写入的别人的输入。但我想这句话假设一个以自我为中心的程序员,他们自己的程序是他们的参考点,而不是环境中的任何人(或每个人)。

答案 1 :(得分:4)

输入迭代器是输入流的包装器。 输出迭代器是输出流的包装器。

(不可否认,您可以编写其他输入/输出迭代器,但这些是标准中存在的示例,形式为istream_iteratorostream_iterator

输入流是您读取的输入流(您获得输入),因此,输入迭代器也是您可以从中获取输入的输入流。

我同意,如果你把它们视为迭代器,它可能有点不直观。但是当你记得他们通常包裹一个流时,它更有意义。

例如,您可以围绕ostream_iterator创建std::cout(这是一个OutputIterator)。