C++部分填充动态数组
C++ partially filled dynamic array
所以我有一个部分填充的数组,有一组函数要为它编写。
基本上,数组的行为是这样的。一个整数被添加到下一个可用的可用空间中,当容量达到时,数组的大小加倍,所有元素都被添加到新的空间中。
+---+---+---+---+
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()代码中,但您没有包含他的代码。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错