有些时候你想要在不知道你需要多少数据的情况下分配数据。
大多数情况下,矢量都很好,但有时候分配一系列内存块会更有效,并根据需要创建新的块。
如果您不需要通过索引直接访问它们(例如仅弹出最后一项),则可以将它们保存为内存块。否则,一旦完成,就可以分配固定大小的矢量并将数据复制到其中。
虽然可以在Rust中使用LinkedList
Vec
来完成此操作,但还是有更惯用的方式来执行此任务吗?
答案 0 :(得分:3)
实际上,我倾向于在这种情况下使用Vec<Vec<T>>
,这类似于std::deque
在C ++中实现的方式。
使用Vec<Vec<T>>
所有内部Vec<T>
具有相同的最大大小,除了第一个和最后一个Vec<T>
以外的所有内容都满了,您可以使用O(1)索引和内存稳定性。
当然,当外部Vec
重新分配时,指向块的指针会移动,但是24个字节的memcpy
很容易。