如何实现C ++向量类以允许动态地重新调整数组大小?
是通过链接列表类型的实现来完成的吗? 每次添加或删除元素时是否从头开始创建新数组?
谢谢, [R
答案 0 :(得分:2)
典型行为:在内部,std::vector
具有一个长度为capacity
的连续数组。在任何给定点,实际上只使用size
个元素。如果在任何时候size
超过capacity
(假设您已经多次调用push_back()
),则会分配一个更大的新内部数组(capacity
可能会加倍) 。然后将旧数组中的所有元素复制到新数组中,并删除旧元素和数组。
答案 1 :(得分:0)
细节依赖于实现,但vector保证的内存块保证是连续的。
GCC在重新分配内存时使用2.0系数,MSVC使用1.5系数。
答案 2 :(得分:0)
大多数实现都使用一个简单的数组,并在数组变满时将容量加倍。这确实涉及将现有元素复制到新的内存块,但是由于您不必在相当长的一段时间内再次执行此操作而得到补偿。 (使用这种技术,元素添加以分摊的常数时间运行。)