假设您有一个容量为5的数组,并且假设您还有一个计数变量,它计算添加到数组中的每个条目。你怎么会真正的数组呢?使用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;
这个问题是我似乎很难重新分配我的items数组。
答案 0 :(得分:8)
我会以std::vector<item>
的形式重新分配它,假设使用数组没有压倒一切的理由。这样可以完全避免几个问题。
答案 1 :(得分:5)
你为什么要这样做?为什么你认为:
std::vector<item> items;
不适合你?
答案 2 :(得分:3)
您的旧数组items
仅包含size
个元素,因此您需要将for
循环的上限从size
更改为size*2
'将旧元素复制到新数组。
答案 3 :(得分:1)
可能因为尺寸未初始化。此外,您需要确保大小小于maxSize。