gpt4 book ai didi

C++ 部分填充的动态数组

转载 作者:行者123 更新时间:2023-11-27 22:50:49 26 4
gpt4 key购买 nike

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

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

            +---+---+---+---+
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() 的行为如下。

Inserts a new element elt at the next available/empty slot in the array. If the current array has reached its capacity, a copy of the array is created having twice the capacity of the old array first, then the new element is inserted in the new array. You make elementData to point to the new array (of course). But you must also DELETE the old array to avoid memory leak. You also have to set capacity and size appropriately.

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

附言我知道 Vectors,但想将这种方法用于我正在尝试做的事情。

最佳答案

elementData = resized;
delete [] resized;

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

elementData[size++] = elt;

关于C++ 部分填充的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37379775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com