如何在C++中存储字符串数组?

如何在C++中存储字符串数组?,c++,arrays,string,stl,C++,Arrays,String,Stl,当声明一个字符串数组(如std::array myArray=…)时,它是如何存储在内存中的 在数组中,元素应该顺序存储在内存中,但任何第k个元素都应该可以通过索引在固定时间内访问,那么,它如何处理可变长度字符串呢 我发现了以下几点: 结构结合了C风格的性能和可访问性 数组具有标准容器的优点,例如了解其 自身大小、支持赋值、随机访问迭代器等 一般来说,了解这种结构的内存布局并不重要,重要的是访问器和修饰符的复杂性。保证在固定时间内完成访问。我怀疑在幕后您有一个C-array…重载运算符[]可用于

当声明一个字符串数组(如std::array myArray=…)时,它是如何存储在内存中的

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

我发现了以下几点:

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


一般来说,了解这种结构的内存布局并不重要,重要的是访问器和修饰符的复杂性。保证在固定时间内完成访问。我怀疑在幕后您有一个C-array…

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

std::string通常被实现为指向某种可变长度存储的指针。这里面没有魔力。它可以像任何其他固定大小的对象一样存储在数组中。可变大小部分是间接的,数组与之无关。

内存中有固定大小字符串对象的常规数组。每个字符串的实际数据分别分配到另一个内存位置。

请小心,按顺序存储元素并不能确保随机访问在恒定时间内:请考虑一个链表。@Jean BaptisteYunès Linklist不会按顺序存储元素。@pranitkothari是的,它会。从某种意义上说,它们是在一个定义良好的序列中。@juanchopanza我们将下一个节点的地址保留在上一个节点中?@pranitkothari这是实现链表的一种方法。这并不总是很重要,但这是问题的重点。这不可能是重点,因为您通常无法直接访问该结构!