2012-02-29 63 views
2

我需要在運行時爲散列表分配創建一個鏈接列表數組。我們給出的示例代碼只允許創建靜態大小的數組,我無法弄清楚如何修改它以使用變量,因爲我嘗試過的所有內容都會導致錯誤。如何創建動態大小的鏈接列表數組?

示例代碼:

typedef std::list<int> INT_LIST; 
typedef INT_LIST* INT_LIST_POINTER; 
int size = 13; 
INT_LIST_POINTER myArray[size]; 
INT_LIST_POINTER tmpPtr; 
// initialize the array to point to empty lists 
for (int i=0; i<size; i++){ 
tmpPtr = new INT_LIST; 
myArray[i] = tmpPtr; 
} 

在我當前的非工作代碼:

typedef std::list<int> INT_LIST; 
typedef INT_LIST* INT_LIST_POINTER; 
INT_LIST_POINTER myArray = new INT_LIST[p]; 
INT_LIST_POINTER tmpPtr; 
for (int i=0; i<n; i++){ 
INT_LIST* temp = new INT_LIST; 
myArray[i] = temp; 
} 

的主要問題似乎是與

myArray[i] = temp; 

這也不說那些操作數相匹配。

+0

查看'std :: vector.resize'和'std :: vector.push_back'方法。 – 2012-02-29 09:25:44

+0

如果你想結束你的老師,請指出示例代碼是無效的C++。它應該是'const int size = 13;'。爲了演示這一點,使用例如帶有'-pedantic-errors'選項的GCC來禁用非標準語言擴展。 – 2012-02-29 09:42:29

+0

所有大寫標識符(按慣例)用於在短時(例如T,U,T2)表示模板參數,否則爲預處理器宏。它們不應該用於類型。一個小問題,但足以讓我想到誰給你你的示例代碼沒有線索。此外,爲什麼當你只需要一個'std :: list'數組時,有一個指向'std :: list'的指針數組?它效率較低,維護性較差(請注意 - 取消分配代碼 - 「delete」的另一個循環)從樣本中缺失)。 – 2012-02-29 10:04:05

回答

2

如果這是C++,爲什麼不使用std

std::vector<std::list<MyClass> > x; 
+1

這顯然是一個很好的答案,但OP標記了「家庭作業」的問題,所以如果他不能在'std ::'內使用任何東西,我不會感到驚訝。 – ereOn 2012-02-29 09:04:08

+0

忘記包含這兩行 'typedef std :: list INT_LIST; \t typedef INT_LIST * INT_LIST_POINTER;' – 2012-02-29 09:05:57

+0

@ereOn他使用'std :: list'所以'std :: vector myArray;'應該也可以。 – 2012-02-29 09:17:51

2

您分配大小p的數組:

INT_LIST_POINTER myArray = new INT_LIST[p]; 

,然後進行初始化n元素:

for (int i=0; i<n; i++){ 

除非pn是一樣的東西,這看起來不正確。

P.S.當你完成它時,不要忘記delete[] myArray

+0

謝謝你指出,你是正確的。 – 2012-02-29 09:09:26

+0

更重要的是這再次分配一個固定大小的數組。 – 2012-02-29 09:22:03

+0

你也是對的,我已經改變了原來的文章中的措辭,我不需要它是完全動態的。 – 2012-02-29 09:28:20