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

时间:2010-11-21 22:48:27

标签: c++ vector

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

是通过链接列表类型的实现来完成的吗? 每次添加或删除元素时是否从头开始创建新数组?

谢谢, [R

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

细节依赖于实现,但vector保证的内存块保证是连续的。

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

答案 2 :(得分:0)

大多数实现都使用一个简单的数组,并在数组变满时将容量加倍。这确实涉及将现有元素复制到新的内存块,但是由于您不必在相当长的一段时间内再次执行此操作而得到补偿。 (使用这种技术,元素添加以分摊的常数时间运行。)