怎样才能在一个标准的方式定义在C ++ 11向前输出迭代器?
根据标准一forward_iterator只是input_iterator。 所以相应的forward_iterator_tag
仅延input_iterator_tag
。 如果我们使用std::iterator
来定义我们的迭代器,我们用什么标签中为正向输出迭代器?
它是规范的定义,扩展双方的私人标签forward_iterator_tag
和output_iterator_tag
或者是有没有更好的解决办法?
该规范的事情是要继承std::iterator<std::forward_iterator_tag, T>
只。 迭代器只有一个类别。
该标准具有用于输出迭代,这也是一个前向迭代没有算法(或其它用途)。 输出迭代器的标准中所有应用仅需要单通。
相反,标准品具有可变与类别不变的迭代器前进/比迪/随机接入的想法。 需要通过迭代器来编写,而且需要比单通更好的所有算法,也通过他们写通过相同的迭代器读取。 这是std::remove
, std::sort
和其他变异算法。
不被迭代标签检测可变的和不可改变的迭代器之间的差异,它是由形成是否良好的赋值表达式被确定。 因此,举例来说,如果你传递一个迭代器std::sort
这是不可变的,则算法无论如何也不会编译,所以一般没有必要为输入迭代器也被标记为output_iterator_tag
。 这需要所有的算法, OutputIterator
将只用一个可变的工作ForwardIterator
,再没有必要为它与被标记output_iterator_tag
。
如果你有那些标准算法的不同需求,那么我不能马上想到的一个原因,你的建议将不会为您的迭代工作。 但它不会检测可变标准迭代器。 例如std::deque<int>::iterator
和int*
有迭代器类别random_access_iterator_tag
,不是你的私人标签,并没有任何与output_iterator_tag
。 所以,你可能会更好过定义自己的特性类,而不是希望以适应现有的iterator_traits::iterator_category
您提供所需的信息。