1

有时您想在不提前知道需要多少数据的情况下分配数据。

大多数向量都可以按原样进行,但有时分配内存块链并根据需要创建新块更有效。

如果您不需要通过索引直接访问它们(例如仅弹出最后一项),则可以将它们保存为内存块。否则,一旦完成,就可以分配一个固定大小的向量并将数据复制到其中。

虽然这可以在 Rust 中使用LinkedListof来完成Vec,但是否有更惯用的方式来执行此任务?

4

1 回答 1

3

实际上,我更喜欢Vec<Vec<T>>在这种情况下使用 a,这类似于std::deque在 C++ 中实现的方式。

Vec<Vec<T>>如果所有内部Vec<T>都具有相同的最大大小,并且除了第一个和最后一个之外的所有内部Vec<T>都已满,您可以拥有 O(1) 索引内存稳定性。

当然,指向块的指针会随着外部的Vec重新分配而移动,但是memcpy24 字节的 a 就足够简单了。

于 2016-08-28T15:47:50.850 回答