【问题标题】:Is string subscript an associated index?字符串下标是关联索引吗?
【发布时间】:2018-07-10 16:40:48
【问题描述】:

下标运算符 ([]) 采用 std::string::size_type 值。 运算符返回对给定字符的引用 位置。下标中的值称为“一个下标”pp93 ~ 94 C++ Primer 5ed.

向量是对象的集合,所有对象都具有相同的类型。集合中的每个对象都有一个关联的索引,它给出 访问该对象。pp96 C++ Primer 5ed。

问题:

字符串下标是关联索引吗?如果不是,std::string 类型的下标和集合/向量的关联索引有什么区别?

【问题讨论】:

  • 根据std::vector::operator[],函数“[r]返回对指定位置pos的元素的引用。不执行边界检查。”这与第一个摘录的下标运算符完全相同,所以我认为,是的,字符串下标是一个关联索引。
  • “关联索引”不是官方术语,它只是指“与元素关联的索引”,这种说法对向量和字符串都有意义

标签: c++ string indexing subscript


【解决方案1】:

将“索引”视为“项目的序号”,而不是将“索引”视为“书中的查找表”。

他们对向量的看法是,它们中的元素可以通过顺序数字索引访问:v[0]v[1] 等。

字符串和其中的字符也是如此。

【讨论】:

    【解决方案2】:

    根据std::vector::operator[],函数:

    返回对指定位置 pos 的元素的引用。不执行边界检查。

    根据std::basic_string::operator[],函数:

    返回对指定位置 pos 的字符的引用。不执行边界检查。如果 pos > size(),则行为未定义。

    因此,它们几乎是一回事。术语关联索引的意思正是它听起来的样子;它是与元素关联的索引,仅此而已。

    【讨论】:

      【解决方案3】:

      这里的措辞相当精确,但这两种简单的情况并没有真正的区别。对于stringvectorX[0]表示X的第一个元素。也就是说,0是X的第一个元素的关联索引,0也是operator[]的参数,也就是下标。

      要查看一个不那么简单的示例,请考虑std::string_view。您可以拥有字符串第 100 到第 200 个字符的 string_view。现在view[5] 有下标 5,但它指的是底层字符串中的第 105 个字符。

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 2013-06-25
        • 1970-01-01
        • 2011-03-03
        • 2016-07-09
        • 2020-02-27
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多