我只想试着理解C ++中 InputIterator 和 OutputIterator 的实际情况。现在,直到现在,我一直认为我总是知道输入和输出的定义也适用于迭代器。
这意味着输入是“放入某个东西”,这意味着你可以写入迭代器,就像在迭代器中放入一样。
输出是“放在某个地方”,这对我来说总是意味着,要写入屏幕或坚持变量。
现在结果是我们的朋友Iterators,另一方面, InputIterator 用于对元素序列的只读访问,这似乎应该被称为“输出“,因为您使用这种类型的迭代器将std::vector<int>
的元素写入std::cout
,例如。
OutputIterator 原来是一个只写访问权限。
我想知道,如果有人能给出一个合理的解释,我会发现迭代器类型的命名很奇怪吗?
答案 0 :(得分:8)
这只是一个惯例问题。 “输入”和“输出”被理解为关于环境的“从”/“到”,而不是关于您的程序;或者在另一个方向,作为关于你的程序的“进/出”,而不是环境。
因此,“输入”从环境中获取,并使其可用于您的程序,例如istream
或read
。 “输出”会将您程序中的某些内容放回到环境中,例如ostream
和write
。
迭代器遵循相同的方向,输入迭代器使程序可用范围内的数据,而输出迭代器将程序中的数据放入范围。
您可能会想到的方式是“输入”是您的程序应该写入的别人的输入。但我想这句话假设一个以自我为中心的程序员,他们自己的程序是他们的参考点,而不是环境中的任何人(或每个人)。
答案 1 :(得分:4)
输入迭代器是输入流的包装器。 输出迭代器是输出流的包装器。
(不可否认,您可以编写其他输入/输出迭代器,但这些是标准中存在的示例,形式为istream_iterator
和ostream_iterator
)
输入流是您读取的输入流(您获得输入),因此,输入迭代器也是您可以从中获取输入的输入流。
我同意,如果你把它们视为迭代器,它可能有点不直观。但是当你记得他们通常包裹一个流时,它更有意义。
例如,您可以围绕ostream_iterator
创建std::cout
(这是一个OutputIterator)。