我已经提供了uint8_t[n]
类型的数据缓冲区。现在我必须在此数组中添加 head ,即之前uint8_t
的一个值。但我不想记忆数据!
给定数组:
0x0800 - Start of data buffer
...
0x0900 - End of data buffer
新数组:
0x07ff - Head
0x0800 - Start of data buffer
...
0x0900 - End of data buffer
是否有可能这样做或内存分配有问题?
答案 0 :(得分:3)
如果没有移动内存对您来说很重要,那么std::deque
可以为您做到这一点:
std::deque
(双端队列)是一个索引序列容器,允许在其开头和结尾快速插入和删除。此外,在deque任一端的插入和删除永远不会使指针或对其余元素的引用无效。与
std::vector
相反,双端队列的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小的数组,带有额外的簿记,这意味着对std::deque
的索引访问必须与vector的索引访问相比,执行两个指针解引用,只执行一个。双端队列的存储会根据需要自动扩展和收缩。 扩展deque比
std::vector
的扩展便宜,因为它不涉及将现有元素复制到新的内存位置。另一方面,deques通常具有较大的最小内存成本;只有一个元素的双端队列必须分配其完整的内部数组(例如64位libstdc ++上对象大小的8倍;对象大小的16倍或64位libc ++中的4096字节,以较大者为准)。