【问题标题】:Is vector<int>::const_iterator an output_iterator?vector<int>::const_iterator 是 output_iterator 吗?
【发布时间】:2016-12-01 01:56:24
【问题描述】:

根据 C++ 概念:

input_iterator 以外的任何迭代器都是 output_iterator。

vector&lt;int&gt;::const_iteratorrandom_access_iterator,当然这是 output_iterator

然而,根据cppreference.comoutput_iterator 必须是可写的,而vector&lt;int&gt;::const_iterator 不是。

vector&lt;int&gt;::const_iteratoroutput_iterator 吗?

另见:How to check if an iterator is an output_iterator in c++?

【问题讨论】:

  • 不是。输出迭代器是只写迭代器。

标签: c++ iterator language-lawyer c++-concepts


【解决方案1】:

没有。 vector&lt;int&gt;::const_iterator 是一个常量迭代器 ([container.requirements.general]),这意味着它不满足输出迭代器的要求。

[iterator.requirements.general]/4:

进一步满足输出迭代器要求的迭代器称为可变迭代器。不可变迭代器被称为常量迭代器


vector::const_iterator 是 random_access_iterator,当然也是 output_iterator。

这是完全错误的。

【讨论】:

    【解决方案2】:

    看这里:Cpp Reference

    OutputIterator 是一个可以写入指向的迭代器 元素。

    【讨论】:

      【解决方案3】:

      您的引用显然意味着任何不满足输入迭代器要求的迭代器都是输出迭代器。

      迭代器类别的标准层次结构定义(参见 24.2.1)以下具有嵌套要求的迭代器类别序列

      随机访问 -> 双向 -> 转发 -> 输入

      而输出迭代器类别是独立的。

      这种嵌套意味着每个 Forward 迭代器也是 Input 迭代器(即也满足 Input 迭代器范畴的要求),每个 Bidirectional 迭代器同时也是 Forward 和 Input 迭代器。这是应该解释你的相当的上下文。

      std::vector::const_iterator是一个随机访问迭代器,它同时满足双向、前向和输入迭代器的要求。 IE。在这个意义上std::vector::const_iterator 一个输入迭代器(!)。由于这个原因,您的引用不能用于推断它是一个输出迭代器。

      在此基础上进一步细分为 mutable 迭代器和 nonmutable (constant) 迭代器,但没有必要引入在这种情况下将其放入图片中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-30
        • 2013-12-10
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多