C++用于存储指向对象的指针的矢量类
C++ vector class to store pointers to objects
我有一个多边形类。 目前,多边形的坐标存储在双精度数组中,其中行数由"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) ;
这将完成这项工作
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它