我试图通过链接列表在cpp中编写一个双端队列类,但是,我不知道如何在创建双端队列时确定块(缓冲区)的长度。
为块选择合适的大小将有助于降低双端队列中随机访问的复杂性。
我应该编写一个函数,当推送一个新元素时,它可以动态地调整块的大小,但是我发现它的时间复杂度很高,因为它可能会移动大量数据。
我应该如何处理这个问题。
答案 0 :(得分:0)
查看_DEQUESIZ
的代码(每个块的元素数):
#define _DEQUESIZ (sizeof (_Ty) <= 1 ? 16 \
: sizeof (_Ty) <= 2 ? 8 \
: sizeof (_Ty) <= 4 ? 4 \
: sizeof (_Ty) <= 8 ? 2 : 1) /* elements per block (a power of 2) */
元素增长得越大,元素减少到的数量就越少。仅对于大小大于8个字节的元素,您会获得预期的开销随元素大小的增加而按百分比减少的情况。
查看原始答案here。