C++;实现向量类以允许动态调整数组大小? 如何实现C++向量类以允许动态重新排列数组?< /P>

C++;实现向量类以允许动态调整数组大小? 如何实现C++向量类以允许动态重新排列数组?< /P>,c++,vector,C++,Vector,它是通过链表类型的实现来完成的吗? 是否每次添加或删除元素时都会从头创建一个新数组 谢谢, R典型行为:在内部,一个std::vector具有一个连续的长度数组容量数组。在任何给定的点上,实际上只使用size元素。如果在任何时候size将超过capacity(假设您多次调用push_back()),则会分配一个新的、更大的内部数组(capacity可能会加倍)。然后将旧数组中的所有元素复制到新数组中,并删除旧元素和数组。详细信息取决于实现,但由vector分配的内存块保证是连续的 GCC在重新分

它是通过链表类型的实现来完成的吗? 是否每次添加或删除元素时都会从头创建一个新数组

谢谢,
R

典型行为:在内部,一个
std::vector
具有一个连续的长度数组
容量数组
。在任何给定的点上,实际上只使用
size
元素。如果在任何时候
size
将超过
capacity
(假设您多次调用
push_back()
),则会分配一个新的、更大的内部数组(
capacity
可能会加倍)。然后将旧数组中的所有元素复制到新数组中,并删除旧元素和数组。

详细信息取决于实现,但由vector分配的内存块保证是连续的


GCC在重新分配内存时使用的是2.0系数,MSVC使用的是1.5系数。

大多数实现都使用一个简单的数组,当数组满时,容量将增加一倍。这确实涉及到将现有元素复制到一个新的内存块中,但在相当长的一段时间内,您不必再次这样做,这一点得到了补偿。(使用这种技术,元素添加在固定的时间内运行)

还注意到链表实现虽然看起来有吸引力,但并没有完全填充<代码> STD::vector < /COD>要求,这是内存中的连续布局。刚才讨论了C++关于最优系数的讨论。在Alexandrescu的显著参与下,我认为他们推断这是
alpha
x^2=x+1
)的正根