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

C++ vector class to store pointers to objects

本文关键字:指针 对象 用于 存储 C++      更新时间:2023-10-16

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

我想使用 stl 向量重写它(即向量中的每个元素都是指向大小为 3 的浮点数组的指针)。这将如何完成?比如这是一个有效的声明吗?

vector<float*> vertices;

提前感谢!

struct Vector3 {
 Vector3( float x, float y, float z):_x(x),_y(y),_z(z) )
 {
 }
 float _x , _y , _z;
};
std::vector<Vector3> vertices;

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

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

&vertices[0]

例如,您可以将其传递给像openGL这样的API。

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

构造函数的示例:

vertices.push_back(Vector3( x, y, z ));

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

vertices.reserve( verticeCount);

是的。您还可以创建一个结构Point,它存储一个 3D 点并制作一个使用该结构体的向量:

struct Point {
  double x, y, z;
}
vector<Point> points;

像正常使用一样使用矢量。如果您愿意,还可以存储指向矢量中点的指针。

使用 C++11 你可以这样做:

std::vector<std::tuple<float, float, float>> points;

如果你没有 C++11,你可以使用 boost 来获取元组:

#include <boost/tuple/tuple.hpp>
std::vector<boost::tuple<float, float, float> > points;

或者你可以有一个结构来容纳你的三个浮点数:

struct Points
{
  float x_;
  float y_;
  float z_;
};
std::vector<Points> points;

当您不需要原始指针时,请远离它们。依靠 STL 容器或定义自己的结构/类来保存东西要安全得多。

vector < vector <float> (3)> (n) ;这将

完成这项工作