2009-11-19 104 views
0

假設您有一個容量爲5的數組,並且假設您還有一個可變計數器來計算添加到數組中的每個條目。你將如何實現數組的浮點操作?使用C++語法?數組重新分配C++

void BST::reallocate() 
{ 
    item *new_array = new item[size*2]; 
for (int array_index = 0; array_index < size * 2; array_index++) 
    { 
     if (! items[array_index].empty) 
     { 
    new_array[array_index].theData = items[array_index].theData; 
    new_array[array_index].empty = false; 
    } 
    } 
    maxSize += size; 
    delete [] items; 

    items = NULL; 
    items = new_array; 
} 

如何重新分配數組? BST ctor位於私人物品結構下方,以消除任何混淆。

BST::BST(int capacity) : items(new item[capacity]), Position(0), 
leftChild(0), rightChild(0), maxSize(capacity) 
{ 

} 

這是在BST頭:

private: 
int size; 
int maxSize; 
int Position; 
int leftChild; 
int rightChild; 
struct item 
{ 
    bool empty; 
    data theData; 

}; 

item *items; 

的quesetion是,我似乎具有硬時間與我的項目陣列的再分配。

+0

問題是它正在崩潰 – user40120 2009-11-19 20:02:00

+0

它在哪裏崩潰? – 2009-11-19 20:05:18

+0

其在從項目[i] .theData到new_array [i] .Data的賦值時崩潰。 – user40120 2009-11-19 20:07:44

回答

3

你的舊陣列items只有size元素,所以你需要從size*2當你複製舊元素,新數組在for循環改變上限size

8

我會以std::vector<item>的形式重新分配它,假設沒有壓倒性的理由使用數組。這將完全避免幾個問題。

5

你爲什麼這樣做呢?你爲什麼這麼認爲:

std::vector<item> items; 

不能用嗎?

+0

我認爲這是家庭作業,雖然沒有標記爲這樣。 – BostonLogan 2009-11-19 20:14:46

1

也許是因爲大小未初始化。此外,您需要確保大小小於maxSize。