簡體   English   中英

使用矢量數據結構 - 設計和語法問題

[英]Using a vector data structure - design and syntax questions

我有一些基本的C ++設計/語法問題,非常感謝您的回復。

  • 我有N個地區
  • 每個區域都需要存儲有關對象“元素”的信息

即我想達到這樣的目的:

region[i].elements =區域i的所有元素的列表。

問題1:以下語法(請參閱下面的代碼)/ design是否正確。 我在這里錯過了什么嗎?

編輯

struct elem的實例是由其他一些類創建的,它的內存釋放是該類的處理,我只想使用reg [i] .elements list(vector)來訪問該對象及其成員...所以,我該怎么辦將這些元素對象添加到類Region中的向量“elements”中?

//我已經有了這個需要使用的結構

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


class Region{
   public:
      // I am not sure what should be the syntax here! 
      // is it correct?
      std::vector <elemt*> elements;      
}

// Following is the constructor of "class A"
A::A(){
    // --header file defines: Region *reg;
    // Let numOfRegions be a class variable. ( changes based on "Mac"'s suggestion)
    numOfRegions = 100;
    //allocate memory:
    reg = new Region[numOfRegions];
}

A::~A(){
  delete [] reg;
  reg = NULL;
}

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);

}

問題2: doSomething()的語法是否正確? 后來我想在reg[i]所有元素上運行一個迭代器,並想要訪問, e1->foo1, e1->foo2等。

問題3:在做某事的方法中,我如何確保e1不在“元素”中

UPDATE

糾正了一些語法錯誤,並希望修復用戶'Mac注意到的內存泄漏。

首先擺脫代碼中的內存泄漏。

A::A(int numOfRegions = 100){

    m_reg = new Region[numOfRegions]; // define Region *m_reg in the class 
}

A::~A(){
  delete [] m_reg;
  m_reg = NULL;
}

You are allocating memory in the constructor and storing return address in local variable and it ll get destroyed when its scope is over .

You should store the base address so that you can delete it .

你怎么知道兩個元素是否相同?

根據你關於檢測e1是否已經存在於元素中的問題,看起來map / set / hash可能是比矢量更好的數據結構。

另外,我相信它是push_back,而不是pushBack。

您應該從設計問題中分離語法。 語法是編譯器將檢查並強制執行的內容,但是您可能會再次獲得不需要的語義...

專注於設計,您有什么要求? (對不起,如果有多行,我傾向於對角線閱讀,所以我可能錯過了那里的東西)

有一個類創建/銷毀elemt對象,動態分配真的是一個要求嗎? 或者僅僅是因為元素是用構造類中可用的數據構造的? 如果需要動態分配,那么看起來elemt對象應該由指針(可能是智能指針)保存。 用於刪除對象的類是否跟蹤它們,或者只是處理外部世界的對象,期望用戶代碼調用deallocator函數? elemt對象是否在不同實體之間共享? 還有其他問題你應該考慮......

也許你應該嘗試改寫你的問題,你發布的代碼基本上在語法上是正確的(只是檢查編譯器,我沒有),但不知道你真正想要實現什么,你不能真正問這是好還是壞設計。 描述您的真實問題,然后詢問代碼是否可以滿足您的要求。

當你要求語法時,我可以立即發現丟失的分號。

此外,並不真正推薦公共數據(如元素)。 相反,嘗試使用getter和setter函數。

numOfRegions變量應該是const int ,而不僅僅是int 此外,感覺它是在c'tor而不是在類聲明中聲明它,因為它是一個可調整的設置。 一旦你想迭代reg,你需要重新聲明它,如果你現在保持它。

至於問題三,你只需檢查一下你是否能找到它。 您可能需要一個bool operator==(const elemt &, const elemt &)才能方便地執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM