2010-11-21 50 views
0

如何实现C++向量类以允许动态调整数组大小?如何实现C++向量类以允许动态调整数组大小?

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

谢谢, ř

+0

另请注意,链表实现虽然看起来很吸引人,但并未满足'std :: vector'要求,即*内存中的连续布局。* – 2010-11-21 22:52:54

回答

2

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

+0

太棒了!感谢大家! – Russel 2010-11-21 23:07:08

0

细节与实现有关,但由矢量分配的内存块保证连续。

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

+0

前段时间有人讨论了关于最佳系数的C++。lang.moderated,Alexandrescu的显着参与,我认为他们推断它是'alpha'('x^2 = x + 1'的正根) ) – 2010-11-22 07:28:24

0

大多数实现都使用一个简单的数组,并且每当数组变满时,容量加倍。这确实涉及到将现有元素复制到新的内存块中,但补偿的原因是您不必在一段时间内再次执行此操作。 (使用这种技术,元素添加运行在分期固定的时间内。)