在C ++中测试自定义列表类时卡住

时间:2018-11-02 13:16:12

标签: c++

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]

但是我什么也没得到。怎么了?

更新:我发现了问题。我已经重新实例化了构造函数中的变量,使它们成为局部变量。这最终破坏了对象的整个结构。

1 个答案:

答案 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的时候了。