【问题标题】:Is string::iterator necessarily a random_access_iterator?string::iterator 一定是 random_access_iterator 吗?
【发布时间】:2012-07-10 21:15:23
【问题描述】:

This 页面声明 string::iteratorstring::const_iterator 是“编译器特定的迭代器类型”。这是否意味着string::iterator 属于random_access_iterator 以外的类别?

【问题讨论】:

  • This better reference page 另有说法(而且是正确的)。
  • 我认为这是一个合理的问题。虽然已知 cplusplus.com 包含许多错误,但这并不意味着这个问题不好。它只是要求对不正确的信息进行澄清。
  • 什么错误信息?也许缺少信息,但这不是错误信息。它没有说“编译器特定的迭代器类别”,而是说“编译器特定的迭代器类型”,这是正确的(或者足够接近,也许它应该使用单词实现而不是编译器,但这有点挑剔)
  • 为什么投反对票? cplusplus.com 非常受欢迎 - 始终是 Google 的最高回报。如果不正确,那不是我的错。
  • @ThomasMcLeod,现在你知道要找哪一个了。就我个人而言,我现在大部分的搜索都是在带有书签的en.cppreference.com/w/cpp 上进行的。

标签: c++ stl iterator


【解决方案1】:

ISO C++03,21.3-2 声明:

(...)另外,因为 basic_string 支持的迭代器是 随机访问迭代器(...)

所以是的,那些必然是随机访问迭代器。

【讨论】:

  • 猜猜什么比 cppreference.com 更值得信赖:p
  • 谢谢。 C++11 的 21.4.3 节指出“basic_string 支持的迭代器是随机访问迭代器。”
【解决方案2】:

看N337621.4/3

basic_string 支持的迭代器是随机访问迭代器。

对于此类任务,手头有一个标准(或草案)总是一个好主意。习惯在那里查找东西需要一段时间,但它是第一手资源。

【讨论】:

    【解决方案3】:

    This pagestd::string::iteratorRandomAccessIterator,比 cplusplus.com 更值得信赖。

    【讨论】:

      【解决方案4】:

      这并不意味着它不是随机访问迭代器(正如其他答案所说,标准要求它是随机访问迭代器。)

      这意味着确切的迭代器类型是未指定的,即它们可以是char*,也可以是std::string::__iterator__gnu_cxx::__normal_iterator<char, std::string>或其他东西。任何这些实现​​选择都是允许的,只要它满足随机访问迭代器的要求并且可以通过名称string::iterator 来引用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-02
        • 1970-01-01
        • 2022-08-17
        • 2014-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多