2009-11-19 110 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。