我正在创建一个CAD软件,其中我有一个点&一个行。
#include <vector>
using namespace std;
class point
{
private:
vector<int>* child;
int id;//this is unique id of a point
double x;//absolute x, y, z co-ord
double y;//
double z;//
};
class line
{
private:
point *a;
point *b;
int id;//this is unique for each line object
}
任何线对象都是2个点对象的子对象。 所以,如果我删除一个线的点,那么线对象shud也会被删除。 为此,我想在向量子(类的实例变量)中存储点对象的所有子项(线,圆,三角形......)的 id 点如代码所示。
我的问题是我的方法是否正确? 我的意思是,执行中将有大约100个点对象。 因为每个向量分配一些额外的内存,所以会有很多分配的内存,不会在执行中使用。 任何人都可以建议另一种方法来存储 int 中未知的no作为每个点对象中的序列吗?
答案 0 :(得分:2)
您不需要使用指向矢量的指针,对象可以执行:
#include <vector>
class point
{
private:
std::vector<int> child;
int id;//this is unique id of a point
double x;//absolute x, y, z co-ord
double y;//
double z;//
};
不要忘记添加<vector>
并使用std::vector
限定您的使用。
答案 1 :(得分:1)
我的问题是如何创建此向量&amp;哪里(这样它不会超出范围)?
您已经正确完成了此操作。我建议您不要使用指向vector
的指针,而只是使用vector
本身:
private:
vector<int> child;
这样可以更轻松地处理它,而且您不必自己分配/解除它。
如何让我的孩子在没有内存泄漏的情况下指向创建的向量?
如果您确实需要动态分配指针,则必须致电new
和delete
。为了使其行为正确,您必须在point
类中定义构造函数和析构函数:
class point
{
private:
point() : child(new vector<int>) {}
~point() { delete child; }
vector<int>* child;
int id;//this is unique id of a point
double x;//absolute x, y, z co-ord
double y;//
double z;//
};
但我仍然建议您不要使用指向vector
的指针,如上所述。
答案 2 :(得分:0)
我会以完全不同的方式解决问题。
我会通过id保留两个全局哈希表:一个用于点,一个用于行。 然后我将为每个点使用双向链表数据结构,以便您知道有多少行使用给定点。
通过全局容器类中的简单操作,我可以轻松访问这些数据结构。
我会尝试编写一些“伪”代码以使其更清晰(很快编辑)。