【问题标题】:Do random access iterator get converted to InputIterator?随机访问迭代器是否转换为 InputIterator?
【发布时间】:2015-12-04 20:07:08
【问题描述】:

函数从向量开始 http://www.cplusplus.com/reference/vector/vector/begin/ 返回一个随机访问迭代器,而函数 find 采用 InputIterator http://www.cplusplus.com/reference/algorithm/find/,如示例所示“it = find (myvector.begin(), myvector.end(), 30);”。随机访问迭代器是否被转换为 InputIterator 以与 find 一起使用?

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    不需要转换,因为每个随机访问迭代器已经一个输入迭代器。

    随机访问迭代器和输入迭代器不是类型,而是概念。由于对随机访问迭代器的要求比对输入迭代器的要求更严格,所以我的第一句话成立。

    在对初学者更友好的情况下,也许同样的事情:如果您想通过“仅限车辆”标志与您的汽车一起通过,您不需要做任何特别的事情,因为您的汽车已经是车辆。与迭代器概念相同。

    底线:您可以将std::vector::begin 的返回值传递给std::find,没有任何问题或陷阱。

    【讨论】:

    • 具体来说,InputIterator 是一种支持operator++operator* 进行读取的类型。 std::vector::iterator 支持operator+进行随机访问(跳过元素),operator*进行写入。
    • 随机访问迭代器也是OutputIterator吗?因为在复制示例中,第三个参数应该是一个输出迭代器,但它们正在发送一个随机访问迭代器cplusplus.com/reference/algorithm/copy
    • @ThomasLee 不是一般情况下,只有当你可以通过他们写。所以std::vector::const_iterator 不是输出迭代器,但std::vector::iterator 是。所以只要你使用的vector不是const,你可以直接使用std::vector::begin,只要它足够大来存储数据。 Details.
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 2022-11-14
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2020-04-23
    相关资源
    最近更新 更多