gpt4 book ai didi

c++ - 定义前向输出迭代器的规范方式

转载 作者:可可西里 更新时间:2023-11-01 18:36:04 25 4
gpt4 key购买 nike

如何以规范的方式在 C++11 中定义前向输出迭代器?

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

定义一个扩展 forward_iterator_tagoutput_iterator_tag 的私有(private)标签是规范的还是有更好的解决方案?

最佳答案

规范的做法是继承std::iterator<std::forward_iterator_tag, T>只要。迭代器只有一类。

该标准没有针对同时也是前向迭代器的输出迭代器的算法(或其他用途)。标准中对输出迭代器的所有使用都只需要一次通过。

相反,该标准具有 forward/bidi/randomaccess 类别的可变迭代器与不可变迭代器的概念。所有需要通过迭代器编写的算法,以及需要比单遍更好的算法,也通过它们编写的相同迭代器进行读取。这是 std::remove , std::sort和其他变异算法。

可变迭代器和不可变迭代器之间的区别不是由迭代器标记检测到的,它是由赋值表达式是否合式决定的。因此,例如,如果您将迭代器传递给 std::sort这是不可变的,那么算法无论如何都不会编译,所以通常不需要输入迭代器也被标记为 output_iterator_tag .所有需要 OutputIterator 的算法将只使用可变的 ForwardIterator , 同样不需要用 output_iterator_tag 标记它.

如果您的需求与标准算法的需求不同,那么我无法立即想到您的建议不适用于您的迭代器的原因。但它不会检测可变标准迭代器。例如std::deque<int>::iteratorint*有迭代器类别 random_access_iterator_tag ,不是您的私有(private)标签,与 output_iterator_tag 无关.因此,您最好定义自己的特征类,而不是希望适应现有的 iterator_traits::iterator_category。提供您想要的信息。

关于c++ - 定义前向输出迭代器的规范方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com