2010-02-09 89 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