dynamic arrays的基本实现是2n大小,其中一半空间由现有元素填充,另一半保留在末尾 strong>用于在O中追加新元素(1 ) 时间。
在数组末尾以外的任何位置插入新元素需要重新分配数组,这是一项昂贵的操作。
是否有可调整大小数组的C ++实现,其中空间也保留在数组的开头,以便有效地预先添加元素?如果是这样,与末尾保留的空间相比,预留了多少空间用于追加?我认为prepending是一种不那么常见的操作,但是如果它在程序中经常发生,那么重新分配每个前置操作可能是毁灭性的。
答案 0 :(得分:3)
Deques允许在摊还的常数时间内预先计算和附加。
与vectors不同,数组连续存储并在达到容量时重新分配,不能保证deque元素连续存储。相反,deques将元素存储在块中。如果push_back()或push_front()调用需要更多空间,则会分配并链接到新的空间块。
感谢Mark Ransom在评论中发布有关deques的内容。
答案 1 :(得分:1)
我没有听说过任何此类实施。但是,如果您不需要在内存中按顺序对元素进行排序,则可以使用std :: list并在任何位置插入O(1)。