[英]Using a vector data structure - design and syntax questions
我有一些基本的C ++設計/語法問題,非常感謝您的回復。
即我想達到這樣的目的:
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.