main.cpp:
#include <iostream>
#include "array_list.h"
int main() {
array_list dynamic_list;
dynamic_list.print();
dynamic_list.append(2);
dynamic_list.append(4);
dynamic_list.print();
return 0;
}
array_list.cpp:
#include "array_list.h"
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
//class constructor
array_list::array_list() {
size = 0;
capacity = 1;
growth_factor = 2;
data = new int[capacity];
}
array_list::~array_list() {
delete[] list;
}
array_list::array_list(vector<int> initial) {
size = 0;
capacity = 1;
list = new int[capacity];
for (int x: initial) {
append(x);
}
}
int array_list::length(){
return size;
}
void array_list::resize() {
if (size > capacity) {
capacity *= growth_factor;
int *temp_list = new int[capacity];
for (int i = 0; i < size; i++){
temp_list[i] = list[i];
}
delete[] list;
list = temp_list;
}
}
void array_list::append(int n) {
if (size >= capacity) {
resize();
}
list[size] = n;
size++;
}
void array_list::print() {
{
if (size == 0) {
cout << "size is 0, empty list" << endl;
} else if (size > 0) {
cout << "[";
for (int i = 0; i < size - 1; i++) {
cout << list[i];
cout << ", ";
}
cout << list[size - 1] << "]" << endl;
}
}
}
array_list.h:
#include "math.h"
#include <iostream>
#include <iomanip>
#include <vector>
#include <stdexcept>
#include <cmath>
using namespace std;
class array_list {
private:
int size;
int growth_factor;
int capacity;
int *list;
public:
array_list();
~array_list();
array_list(vector<int>initial);
void resize();
void append(int temp);
void print();
int length();
};
#endif
我正在用c ++创建自定义列表类。我想测试它,但是当我这样做时,没有输出到终端。我已经看了几个小时的代码,是的,我已经尝试过使用调试器。遇到这种情况时,新鲜的眼睛很高兴。
运行此代码时,应该将以下输出输出到终端: [2,4]
但是我什么也没得到。怎么了?
更新:我发现了问题。我已经重新实例化了构造函数中的变量,使它们成为局部变量。这最终破坏了对象的整个结构。
答案 0 :(得分:3)
在添加元素时,如果需要调整大小,则忘记实际添加该数字:
void array_list::append(int n) {
if (size < capacity) {
list[size] = n;
size++;
}
else {
resize();
}
}
修复:
void array_list::append(int n) {
if (size >= capacity) {
resize();
}
list[size] = n;
size++;
}
这是每个人(也许Jon Skeet除外)都会犯的错误。您的程序中有几种这样的女仆。除非您使用调试器,否则很难独自找到它们。可能是您学习how to use a debugger的时候了。