用于存储指向对象的指针的C++向量类

Ama*_*Val 1 c++ vector

我有一个Polygon类.目前,多边形的坐标存储在一个双数组中,其中行数由"n"指定,列数仅为3(x,y,z).

我想用stl向量重写它(即向量中的每个元素都是一个指向大小为3的float数组的指针).怎么做?这是一个有效的声明吗?

vector<float*> vertices;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

con*_*t3d 5

struct Vector3 {

 Vector3( float x, float y, float z):_x(x),_y(y),_z(z) )
 {
 }

 float _x , _y , _z;
};

std::vector<Vector3> vertices;
Run Code Online (Sandbox Code Playgroud)

不需要指针,因为它会增加管理内存的复杂性(如果它是由new分配的),因为std :: vector不会拥有指针,你将不得不删除它.

此外,std :: vector保证在内存中是连续的,因此可以安全地获取第一个元素的地址,

&vertices[0]
Run Code Online (Sandbox Code Playgroud)

你可以将它传递给像openGL这样的API.

添加新元素也很容易,您可以创建构造函数或逐个设置元素.

构造函数的示例:

vertices.push_back(Vector3( x, y, z ));
Run Code Online (Sandbox Code Playgroud)

在开始时分配一次内存也是一种更好的做法.

vertices.reserve( verticeCount);
Run Code Online (Sandbox Code Playgroud)

  • 如何添加元素可能不会立即显而易见:vertices.push_back(Vector3()); (2认同)