C++部分填充动态数组

C++ partially filled dynamic array

本文关键字:动态 数组 填充 C++      更新时间:2023-10-16

所以我有一个部分填充的数组,有一组函数要为它编写。

基本上,数组的行为是这样的。一个整数被添加到下一个可用的可用空间中,当容量达到时,数组的大小加倍,所有元素都被添加到新的空间中。

+---+---+---+---+
elementData  | 6 | 2 | 4 |  |
+---+---+---+---+
+---+       +---+
capacity | 4 |  size | 3 |
+---+       +---+

它就是这样创造的。

int ar[5] = {6, 2, 4, 7, 3};
PFArray pf;
cout << "==== Test addElement() ===n";
for (int i = 0; i < 5; ++i) {
cout << "Insert " << ar[i] << ": ";
pf.addElement(ar[i]);
displayResult(pf);
}

我尝试编写的addElement()函数是这样的。

void PFArray::addElement(int elt)
{
if (size == capacity)
{
int *resized = new int[size*2];
capacity = size*2;
for (int i = 0; i < size; i++)
resized[i] = elementData[i];
elementData = resized;
delete [] resized;
}
elementData[size++] = elt;
}

我遇到了两个错误。第一,在每行的开头,一个0被添加到数组中。

==== Test addElement() ===
Insert 6: [0,6,]  -- size=2, capacity=2
Insert 2: [0,6,2,]  -- size=3, capacity=4
Insert 4: [0,6,2,4,]  -- size=4, capacity=4
Insert 7: [0,6,2,4,7,]  -- size=5, capacity=8
Insert 3: [0,6,2,4,7,3,]  -- size=6, capacity=8

第二,我在elementData[size++] = elt;线上收到一个错误EXC_BAD_ACCESS

如果有人能指出我做错了什么,我将不胜感激。仅供参考,我对C++这门语言还很陌生。

addElement()的行为如下。

在数组中的下一个可用/空槽处插入新元素elt。如果当前阵列已达到其容量,则首先创建一个容量是旧阵列容量两倍的阵列副本,然后将新元素插入到新阵列中。您使elementData指向新数组(当然)。但是您还必须删除旧的数组以避免内存泄漏。您还必须适当地设置容量和大小。

我已经尝试包含所有我认为相关的代码,但如果您需要我提供更多,我也会很高兴!

第页。S.我知道Vectors,但我想用这种方法来做我想做的事情

elementData = resized;
delete [] resized;

在那里,您删除了分配给elementData的数组,然后向其写入:

elementData[size++] = elt;

正如Zdeslav所说,您可以写入已删除的数组。正确的方法是:

delete [] elementData;
elementData = resized;

第一个错误似乎在displayResult()代码中,但您没有包含他的代码。