【问题标题】:How is an array of strings stored in c++?字符串数组如何存储在 C++ 中?
【发布时间】:2014-12-07 10:54:09
【问题描述】:

在声明std::array<std::string, 5> myArray = ...这样的字符串数组时,它是如何存储在内存中的?

在数组中,元素应该按顺序存储在内存中,但任何第 k 个元素都应该可以在恒定时间内通过索引访问,那么,它如何处理可变长度字符串?

【问题讨论】:

    标签: c++ arrays string stl


    【解决方案1】:

    有一个固定大小的普通数组string对象(在内存中顺序)。每个字符串的实际数据分别分配在另一个内存位置。

    【讨论】:

      【解决方案2】:

      重载的operator [] 可用于std::array。与普通数组一样,std::array 顺序存储元素。因此,仍然可以在恒定时间内访问第 k 个元素。

      【讨论】:

      • 小心,按顺序存储元素并不能确保随机访问是在恒定时间内:想想一个链表。
      • @Jean-BaptisteYunès 链接列表不按顺序存储元素。
      • @pranitkothari 是的,确实如此。从某种意义上说,它们处于明确定义的序列中。
      • @juanchopanza 我们在前一个节点保留下一个节点的地址吗?
      • @pranitkothari 这是实现链表的一种方式。
      【解决方案3】:

      std::string 通常实现为指向某种可变长度存储的指针。它没有魔法。它可以像任何其他 固定大小 对象一样存储在数组中。 “可变大小”部分是间接的,数组不关心它。

      【讨论】:

        【解决方案4】:

        我发现了以下内容:

        结构结合了 C 风格的性能和可访问性 具有标准容器的优点的数组,例如知道它的 自己的大小,支持赋值,随机访问迭代器等。

        一般来说,知道这种结构的内存布局并不重要,重要的是访问器和修饰符的复杂性。保证访问是在恒定时间内完成的。我怀疑在幕后你有一个 C 数组......

        【讨论】:

        • 并不总是很重要,但这就是问题的重点
        • 这不是重点,因为您(通常)无法直接访问该结构!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 2017-09-06
        • 2017-11-15
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        相关资源
        最近更新 更多