gpt4 book ai didi

C++::vector of vector in `struct` 作为另一个 vector 的数据类型

转载 作者:行者123 更新时间:2023-11-28 00:53:08 25 4
gpt4 key购买 nike

我正在从事与物理引擎相关的项目。在下面的 C++ 代码中:

#include <iostream>
#include <vector>

struct Vector3
{
float x;
float y;
float z;
};

struct object
{
std::vector < std::vector < Vector3 > > set_vertices;
int ID;
int Type;
};

class World
{
public:
std::vector< object > objects;

private:
// other members
};

int main (void)
{
World world;

// How to fill in "objects" of "world"?
// Is this safe to do?
world.objects.resize(5);
// What about the way of allocating "set_vertices" below?
for(size_t i=0; i<world.objects.size(); i++)
{
world.objects[i].set_vertices.resize(12, std::vector < Vector3 >(3));
for(size_t j=0; j<world.objects[i].set_vertices.size(); j++)
{
for(size_t k=0; k<world.objects[i].set_vertices[j].size(); k++)
{
world.objects[i].set_vertices[j][k].x = 0.0f;
world.objects[i].set_vertices[j][k].y = 0.0f;
world.objects[i].set_vertices[j][k].z = 0.0f;
world.objects[i].ID = i;
world.objects[i].Type = 0;
}
}
}

return 0;
}

我为 worldobjects 分配内存的方式安全吗?会有任何与内存相关的问题吗?有没有更好的动态初始化 objects 的方法(即不在构造函数中)?如果是这样,如何?谢谢。

最佳答案

我认为使用 RAII 并让 object 的构造函数和析构函数来处理内存会是更好的方法。

在世界中添加一个新的对象,您可以利用std::vector 动态调整大小的能力,只需调用push_back()而不是需要创建以 i 为索引的循环。如果您事先知道要添加多少元素,为避免不必要的调整大小,您可以调用 .reserve(n),其中 n 是您要添加的元素数。

关于C++::vector of vector in `struct` 作为另一个 vector 的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com