我读C++ Standard(节输入迭代),我有硬时间以显现在粗体文本:C++输入迭代
注:对于输入的迭代器,一个== B不意味着+ + a == ++ b。 (相等不保证替换 属性或引用透明度。)输入迭代器的算法不应该尝试通过 两次通过相同的迭代器。它们应该是单通道算法。
我明白输入迭代器是单遍,但我似乎无法用C++代码将其可视化。有人能告诉我如何使迭代器成为一个单一的例子吗?
我读C++ Standard(节输入迭代),我有硬时间以显现在粗体文本:C++输入迭代
注:对于输入的迭代器,一个== B不意味着+ + a == ++ b。 (相等不保证替换 属性或引用透明度。)输入迭代器的算法不应该尝试通过 两次通过相同的迭代器。它们应该是单通道算法。
我明白输入迭代器是单遍,但我似乎无法用C++代码将其可视化。有人能告诉我如何使迭代器成为一个单一的例子吗?
假设您想从标准输入中读取整数。这样做的一个方法就是使用
#include <iterator>
#include <iostream>
#include <vector>
using namespace std;
const vector<int> v{istream_iterator<int>{cin}, istream_iterator<int>{}};
这将读取到的整数v
(见istream_iterator
)。
在这种情况下,迭代器将会是单次传递很有意义,因为范围是刚刚创建的事情,因为用户键入事物,并且每个元素都被消耗并消失。你不能重申这个范围。
除此之外,没有那么一定要通过
的意思如何使迭代器成为一个单一的通?
如果你的意思是“如何以表示你正在写一个迭代器类有这个限制?”,然后将其iterator_category
到input_iterator_tag
struct my_iterator
{
using iterator_category = input_iterator_tag;
};
如果您想查询(在编译时)迭代器类是否有此限制,请使用iterator_traits
。
转发迭代器是多通道的,你是否指'input_iterator_tag'? –
@ M.M我需要多次感谢您提供有用的评论。非常感谢! –
@AmiTavory对不起,我想从头开始创建输入迭代器(不使用STL或增强)进行学习。我只是不知道如何让我的输入迭代器类成为单通(强制单通)?在我的理解中,它是底层容器或流('stdin')的一个工作,它将迭代器作为输入或前向迭代器,对吗? – Orion
你是什么意思的“如何使迭代器成为一次通过”?他们为什么一次通过?或者如何使用这种迭代器? –
我不确定你在问什么。迭代器就是它们;他们不会“变成”任何东西。你是否要求一个不是multipass的迭代器的例子?如果是这样,请考虑从stdin中读取的文件。 –
@Revolver_Ocelot对不清楚,我想从头开始创建输入迭代器(不使用STL或boost)来学习。我只是不知道如何让我的输入迭代器类成为单通(强制单通)?在我的理解中,它是底层容器或流('stdin')的一个工作,它将迭代器作为输入或前向迭代器,对吗? – Orion