C ++如何在不复制数据的情况下添加和添加数组?

时间:2017-04-08 21:10:53

标签: c++ arrays memory

我已经提供了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

是否有可能这样做或内存分配有问题?

1 个答案:

答案 0 :(得分:3)

如果没有移动内存对您来说很重要,那么std::deque可以为您做到这一点:

  

std::deque(双端队列)是一个索引序列容器,允许在其开头和结尾快速插入和删除。此外,在deque任一端的插入和删除永远不会使指针或对其余元素的引用无效

     

std::vector相反,双端队列的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小的数组,带有额外的簿记,这意味着对std::deque的索引访问必须与vector的索引访问相比,执行两个指针解引用,只执行一个。

     

双端队列的存储会根据需要自动扩展和收缩。 扩展deque比std::vector的扩展便宜,因为它不涉及将现有元素复制到新的内存位置。另一方面,deques通常具有较大的最小内存成本;只有一个元素的双端队列必须分配其完整的内部数组(例如64位libstdc ++上对象大小的8倍;对象大小的16倍或64位libc ++中的4096字节,以较大者为准)。