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

Ton*_*ion 2 c++ iterator naming-conventions

我只想试着理解 C++中的InputIteratorOutputIterator实际上是什么.现在,直到现在,我总是假设我一直知道输入输出的定义也适用于迭代器.

因此,这意味着输入是"放置到的东西",这意味着你可以写迭代器,如,把东西迭代器.

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

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

输出迭代原来是一个是只写访问.

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

Ker*_* SB 8

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

因此,"输入" 环境中获取某些内容并使其可用于您的程序,例如istreamread."输出"将程序中的某些东西放回到环境中,比如ostreamwrite.

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


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


jal*_*alf 5

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

(诚​​然,您可以编写其他输入/输出迭代器,但这些是标准中存在的示例,以istream_iterator和的形式ostream_iterator

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

我同意,如果您只将它们视为迭代器,这可能有点不直观。但是当您记住它们通常包装流时,这就更有意义了。

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