-->

规范的方式来定义向前输出迭代器(Canonical way to define forward ou

2019-07-17 15:17发布

怎样才能在一个标准的方式定义在C ++ 11向前输出迭代器?

根据标准一forward_iterator只是input_iterator。 所以相应的forward_iterator_tag仅延input_iterator_tag 。 如果我们使用std::iterator来定义我们的迭代器,我们用什么标签中为正向输出迭代器?

它是规范的定义,扩展双方的私人标签forward_iterator_tagoutput_iterator_tag或者是有没有更好的解决办法?

Answer 1:

该规范的事情是要继承std::iterator<std::forward_iterator_tag, T>只。 迭代器只有一个类别。

该标准具有用于输出迭代,这也是一个前向迭代没有算法(或其它用途)。 输出迭代器的标准中所有应用仅需要单通。

相反,标准品具有可变与类别不变的迭代器前进/比迪/随机接入的想法。 需要通过迭代器来编写,而且需要比单通更好的所有算法,也通过他们写通过相同的迭代器读取。 这是std::removestd::sort和其他变异算法。

不被迭代标签检测可变的和不可改变的迭代器之间的差异,它是由形成是否良好的赋值表达式被确定。 因此,举例来说,如果你传递一个迭代器std::sort这是不可变的,则算法无论如何也不会编译,所以一般没有必要为输入迭代器也被标记为output_iterator_tag 。 这需要所有的算法, OutputIterator将只用一个可变的工作ForwardIterator ,再没有必要为它与被标记output_iterator_tag

如果你有那些标准算法的不同需求,那么我不能马上想到的一个原因,你的建议将不会为您的迭代工作。 但它不会检测可变标准迭代器。 例如std::deque<int>::iteratorint*有迭代器类别random_access_iterator_tag ,不是你的私人标签,并没有任何与output_iterator_tag 。 所以,你可能会更好过定义自己的特性类,而不是希望以适应现有的iterator_traits::iterator_category您提供所需的信息。



文章来源: Canonical way to define forward output iterator