c++ - 动态数组的实现是否在开始时预留空间用于前置?

标签 c++ arrays dynamic-arrays prepend

dynamic arrays 的基本实现大小为 2n,其中一半空间由现有元素填充,另一半保留在末尾,用于在 O(1) 时间内追加新元素。

在数组末尾以外的任何地方插入新元素需要重新分配数组,这是一项昂贵的操作。

是否有可调整大小数组的任何 C++ 实现,其中空间也在数组的开头保留,以便有效地前置元素?如果是这样,与末尾为追加保留的空间相比,保留了多少空间?我想预置是一个不太常见的操作,但如果它在程序中发生得足够频繁,那么在每个预置操作上重新分配可能是毁灭性的。

最佳答案

Deques允许在摊销的常数时间内添加和添加。

不同于vectors ,其中数组连续存储并在达到容量时重新分配,不保证双端队列元素连续存储。相反,双端队列以 block 的形式存储元素。如果由于 push_back() 而需要更多空间或 push_front()调用,一个新的空间 block 被分配并链接到。

感谢Mark Ransom用于在评论中发布有关双端队列的信息。

关于c++ - 动态数组的实现是否在开始时预留空间用于前置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513845/

相关文章:

C++ 素数类

c - 使用指针访问二维数组

php - 我真的需要关于 PHP 中的多个复选框+文本框的建议

c - 将数组的起始地址对齐为 32 位的倍数?

c++ - 删除动态链表有困难吗?

c++ - 按内部元素对 std::vector 进行排序?

c++ - 生产者-消费者问题

delphi - Delphi 动态数组包含哪些簿记数据?

c - C中动态分配数组的错误

C++ 重载指针的类型转换运算符