2011-10-27 197 views
0

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

+0

我不明白你在做什么。然而,要使用矢量,你首先要“#包括”,然后在某处写入“using namespace std;” –

+0

你已经完成了 –

+2

@SalvatorePreviti从不在全局范围的头文件中使用'namespace x'。 – 2011-10-27 10:39:48

回答

1

我的问题是我该如何创建这个向量&哪里(所以它不会超出范围)?

您已经完成了正确的操作。我建议你dont't使用的一个指针vector,只是一个vector本身:

private: 
    vector<int> child; 

这使得处理更容易,而且你不必分配/自己deallocete它。


如何让我的孩子点没有内存泄漏产生的载体?

如果你确实需要一个动态分配的指针,你必须调用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正如我上面所解释的。

+0

你可以建议任何替代载体;因为在程序执行过程中会有大量内存浪费 –

+1

'vectors'通常只有很小的内存开销,除非插入/删除很多项目,否则通常会非常有效。 – Constantinius

+0

假设每个向量都有32字节的多余内存,那么单个类的100 * 32 = 3200byte的浪费内存......同样有大约30个其他类...多少内存将被浪费! –

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

0

我会以完全不同的方式解决问题。

我会通过id保留两个全局哈希表:一个用于点和一个用于行。 然后,我会为每个点使用双向链表数据结构,以便知道有多少行正在使用给定的点。

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

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