我一直在尝试制作一个动态数组 . 我的main方法调用push_back()将数组添加50次 . 如果数组的大小需要加倍,push_back()方法会调用grow_if_needed()方法 . size()方法返回数组的当前容量 . toString方法用于将数组打印为字符串 . 我在grow_if_needed()方法的末尾不断收到此错误 .
#include <string>
class ArrayList
{
private:
static int capacity;
static int count;
public:
int& operator [](int i);
int *arrayPtr = new int[1];
ArrayList();
int * push_back(int m);
int * grow_if_needed();
int * erase(int m);
int size();
std::string toString();
};
#include "ArrayList.h"
using namespace std;
int ArrayList::capacity = 1;
int ArrayList::count = 0;
int & ArrayList::operator[](int i)
{
return arrayPtr[i];
}
ArrayList::ArrayList()
{
arrayPtr[0] = 0;
}
int * ArrayList::push_back(int m)
{
if (count == size()) {
grow_if_needed();
}
for (int i = size() - 1; i >= 0; i--) {
arrayPtr[i + 1] = arrayPtr[i];
}
arrayPtr[0] = m;
count++;
return arrayPtr;
}
int * ArrayList::grow_if_needed() {
int k;
capacity = size() * 2;
int * tempArray = new int[capacity];
for (k = 0; k < count; k++) {
tempArray[k] = arrayPtr[k];
}
while (k != capacity) {
tempArray[k] = 0;
k++;
}
delete [] arrayPtr;
arrayPtr = tempArray;
return arrayPtr;
}
int ArrayList::size()
{
return capacity;
}
string ArrayList::toString()
{
string num = "";
for (int i = 0; i <= size() - 1; i++) {
num += std::to_string(arrayPtr[i]) + " ";
}
return num;
}
1 回答
在你的
push_back
函数中你有这个循环:这里
size() - 1
是顶级索引,因此在第一次迭代中,当你执行i + 1
时,你已经超出了界限 .此外,这个函数被称为
push_back
,但它试图添加到前面?如果它添加到最后("back")你将不需要循环,并且你的问题将消失"magically" .