在类中创建指向矢量的指针

时间:2011-10-27 10:35:56

标签: c++ vector

我正在创建一个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作为每个点对象中的序列吗?

3 个答案:

答案 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;

这样可以更轻松地处理它,而且您不必自己分配/解除它。


  

如何让我的孩子在没有内存泄漏的情况下指向创建的向量?

如果您确实需要动态分配指针,则必须致电newdelete。为了使其行为正确,您必须在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保留两个全局哈希表:一个用于点,一个用于行。 然后我将为每个点使用双向链表数据结构,以便您知道有多少行使用给定点。

通过全局容器类中的简单操作,我可以轻松访问这些数据结构。

我会尝试编写一些“伪”代码以使其更清晰(很快编辑)。