我想构造两个不同的类点和三角形?
类的实现是我将有一个点数组,然后我将创建一个三角形数组,所以数组中的每个三角形都将链接到数组中的三个点?
类三角形的最佳数据结构是什么?
编辑:让我解释一下:我有一个名为 Apoints 的点数组,我想创建一个新的三角形对象数组。我想为每个三角形分配三个点。但是,例如,当我更改 Apoints 中的一个点时,也应该在所有具有该点的三角形上实施修改。
谢谢
另一个解决方案,这次是 C++11 方式:
class Triangle {
private:
std::array<Point,3> m_points;
public:
Triangle(const std::array<Point,3> & points): m_points(points) {}
};
怎么样:
class Triangle
{
private:
Point a;
Point b;
Point c;
public:
Triangle( Point pa, Point pb, Point pc );
}
这是你要找的吗?
我将采用最简单的解决方案:
class Triangle {
private:
std::vector<Point*> vertices;
};
那这个呢?
class Triangle {
public:
Triangle(Point corners[3]) : corners_(corners) {}
private:
Point corners_[3];
};
根据您的评论,也许您会想要这样的东西来避免分配新内存,但同时要确保三角形只有三个点:
class Triangle {
public:
Triangle(Point (&corners)[3]) : corners_(corners) {}
private:
Point (&corners_)[3];
};
一个小例子可能是这样的:http: //ideone.com/3csNVq
不过要小心所有权和访问已删除的积分!
如果三角形仅由点组成,则无需将元素一一链接。
struct Point { double c[3]; };
struct Triangle
{
Point p[3];
};
class Triangles
{
public:
Triangles (Point * point_ptr, size_t const num_points)
: points(point_ptr), size(num_points)
{ }
Triangle operator[] (size_t const i)
{
size_t p_index = 3*i;
if (p_index < size)
{
return *((Triangle*)points+p_index);
}
}
private:
Point * points;
size_t size;
};
未经测试,但这就是你可以这样做的方式。