std :: vector的连续内存分配

时间:2014-03-03 21:39:05

标签: c++ arrays pointers stdvector

考虑为向量分配对象指针:

std::vector<mapSeg*> mapLayer[3];

是否有可能使这个implmentation成为固定大小的连续对象数组?

是否可以为3 * 64个对象分配一块内存,并将它们正确地放入向量中,如上所述?每个数组代表2D地图上的一层物体(背面,中间,前面),因此对这些层的访问必须是一致的

1 个答案:

答案 0 :(得分:0)

这取决于您要保留多少语义。第一步是

std::vector<object> array[3];

现在我们有一个(有效)可变大小存储的3元素数组。

我们还可以包含std::vector<object>维护三种尺寸,并提供对vector切片的访问权限。插入其中一个子向量现在变得相当昂贵,因为可能需要复制大量数据,这是std::vector<object> array[3]版本避免的。迭代器失效属性也会更严格。

这取决于你想做什么。如果您要在三个emplace_back中的任何一个上重复vector使用第一个版本,如果按顺序填写它们,请不要删除元素,最后一个版本会提供边际效益。