Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::vector的连续内存分配_C++_Arrays_Pointers_Stdvector - Fatal编程技术网

C++ std::vector的连续内存分配

C++ std::vector的连续内存分配,c++,arrays,pointers,stdvector,C++,Arrays,Pointers,Stdvector,考虑为向量分配对象指针: std::vector<mapSeg*> mapLayer[3]; std::向量映射层[3]; 是否可以使此实现成为一个固定大小的连续对象数组 是否可以为3*64个对象分配一块内存,并像上面描述的设置那样在向量中正确寻址?每个数组表示2D地图上的一层对象(后、中、前),因此对这些层的访问必须是一致的,这取决于要保留多少语义。第一步是 std::vector<object> array[3]; std::向量数组[3]; 现在我们有了一个

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

std::vector<mapSeg*> mapLayer[3];
std::向量映射层[3];
是否可以使此实现成为一个固定大小的连续对象数组


是否可以为3*64个对象分配一块内存,并像上面描述的设置那样在向量中正确寻址?每个数组表示2D地图上的一层对象(后、中、前),因此对这些层的访问必须是一致的,这取决于要保留多少语义。第一步是

std::vector<object> array[3];
std::向量数组[3];
现在我们有了一个(有效的)可变大小存储的3元素数组

我们还可以包装一个
std::vector
保持三种大小,并提供对
vector
切片的访问。插入其中一个子向量现在变得相当昂贵,因为可能需要复制大量数据,
std::vector array[3]
版本避免了这一点。迭代器失效属性也将更加严格


这取决于你想做什么。如果您要在三个向量中的任意一个向量上重复放置,请使用第一个版本,如果您按顺序填充它们,不要删除元素,最后一个版本提供的好处微乎其微。

从技术上讲,它是一个固定大小的连续对象数组。但是您实际上想解决什么问题呢?标准要求每个
向量中的
对象*
s在内存中是连续的,并且
数组[3]
在内存中连续创建
向量
对象本身。
object*s
指向的地方完全是另一个问题。。。它只取决于你把什么放入
向量中
——你完全控制着它。我想你的意思是“一个
对象
的连续数组”?也就是说,您指的是某种类型的
对象
,而不是作为存储区域的对象(如标准中所定义)?