【发布时间】:2014-12-07 10:54:09
【问题描述】:
在声明std::array<std::string, 5> myArray = ...这样的字符串数组时,它是如何存储在内存中的?
在数组中,元素应该按顺序存储在内存中,但任何第 k 个元素都应该可以在恒定时间内通过索引访问,那么,它如何处理可变长度字符串?
【问题讨论】:
在声明std::array<std::string, 5> myArray = ...这样的字符串数组时,它是如何存储在内存中的?
在数组中,元素应该按顺序存储在内存中,但任何第 k 个元素都应该可以在恒定时间内通过索引访问,那么,它如何处理可变长度字符串?
【问题讨论】:
有一个固定大小的普通数组string对象(在内存中顺序)。每个字符串的实际数据分别分配在另一个内存位置。
【讨论】:
重载的operator [] 可用于std::array。与普通数组一样,std::array 顺序存储元素。因此,仍然可以在恒定时间内访问第 k 个元素。
【讨论】:
std::string 通常实现为指向某种可变长度存储的指针。它没有魔法。它可以像任何其他 固定大小 对象一样存储在数组中。 “可变大小”部分是间接的,数组不关心它。
【讨论】:
我发现了以下内容:
结构结合了 C 风格的性能和可访问性 具有标准容器的优点的数组,例如知道它的 自己的大小,支持赋值,随机访问迭代器等。
一般来说,知道这种结构的内存布局并不重要,重要的是访问器和修饰符的复杂性。保证访问是在恒定时间内完成的。我怀疑在幕后你有一个 C 数组......
【讨论】: