我想构建两个不同的点和三角形?
类的实现是我将有一个点数组,然后我将创建一个三角形数组,这样数组中的每个三角形将链接到数组中的三个点?
班级三角形的最佳数据结构是什么?
编辑: 让我解释一下: 我有一个名为Apoints的点数组,我想创建一个新的三角形对象数组。我想为每个三角形分配三个点。但是,例如当我在Apoints中更改一个点时,也应该在具有这一点的所有三角形上实现修改。
谢谢
答案 0 :(得分:2)
另一个解决方案,这次是C ++ 11方式:
class Triangle {
private:
std::array<Point,3> m_points;
public:
Triangle(const std::array<Point,3> & points): m_points(points) {}
};
答案 1 :(得分:1)
怎么样:
class Triangle
{
private:
Point a;
Point b;
Point c;
public:
Triangle( Point pa, Point pb, Point pc );
}
这是你在找什么?
答案 2 :(得分:1)
我会选择最简单的解决方案:
class Triangle {
private:
std::vector<Point*> vertices;
};
答案 3 :(得分:1)
这个怎么样?
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
请注意所有权并访问已删除的积分!
答案 4 :(得分:0)
如果三角形仅由点组成,则无需逐个链接元素。
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;
};
未经测试,但这就是你可以做到的方式。