2010-02-09 91 views
0

这与我的other post有关。这里的建议之一是使用类的区域的向量..如下面的代码所示。我有几个初学者的问题 -矢量声明和大小分配

a)如何分配这个向量一个size = numOfRegions?或者我真的需要为矢量分配大小?

b)如何在此vector<Region>中插入Class Region对象?所有这些区域对象需要管理class A

c)我假设我不需要在类A的析构函数中删除此向量..正确吗?

struct elemt { 
    int* vertex; 
    int foo1; 
    double foo2; 
}; 


class Region{ 
    public: 
     std::vector <elemt*> elements; 
     int info; 
} 



class A{ 
public: 
    std::vector<Region> reg; 
    const int numOfRegions = 100; 
} 
A::A(){ 
    // how to create and append Region object to vector std::vector<Region> reg ?? 
    // Do I need to allocate size for this region vector? 
} 

A::~A(){ 
    //do nothing 
// Do I need to delete vector<Region> reg here ?? 
} 

A::doSomething(){ 

// here I want to append the elements to the vector 
// Let i be region 10. 
// Let e1 be an element of "struct elemt" that needs to be added 

    reg[i].elements.push_back(e1); 

} 
+1

你似乎在没有编译器的情况下编写这个程序。为什么要限制自己? – Manuel 2010-02-09 11:08:28

+0

另外,你似乎对STL和C++一般都很失望。也许你应该在实际编码之前学习一些基础材料。看到这个,例如:http://www.cplusplus.com/reference/stl/vector/。 C++有一个陡峭的学习曲线,如果你不熟悉基础知识,你不会太过分。 – Manuel 2010-02-09 11:23:04

+0

我同意..我正在平行阅读材料。有很多东西需要学习。顺便说一句,你能否解释下面的评论中用户f4的含义? (看我的回复) – memC 2010-02-09 11:48:28

回答

2
  1. 呼叫vector.reserve如果你知道你的载体了前面的大小。这不是必需的,因为push_back会在需要时调整矢量大小

  2. vector.push_back(Region());

  3. 您不必删除成员矢量

1

一)矢量为您完成所有的内存管理,你不需要指定大小。然而,你可以,如果你愿意,叫vector::reserve分配足够的内存(这仅仅是一个优化的事情))

B)reg.push_back(Region());

Ç您不必删除矢量它在堆栈中。但是您可能想要删除类Region中的矢量elements的内容。

+0

@ f4:谢谢......请问说明C点吗?你的意思是我应该在类地区的破坏者中做到这一点......一个例子会非常有帮助! ...此外,矢量元素只有“指向其他地方创建的”elem“实例的指针。是否还需要删除类Region中的矢量元素的内容? – memC 2010-02-09 11:36:16

+2

他意味着有人必须注意删除元素对象,但你在另一个问题中说过这是其他一些课程的责任,所以我认为你在没有在'Region'的析构函数中做任何事情都可以。 – Manuel 2010-02-09 11:56:33

+0

好的,我没有完全阅读另一篇文章。有一个其他班级照顾删除元素没关系,只要记住矢量不会为你做:) – 2010-02-09 13:22:32