有没有一种方法可以将大小传递到节点中的数组(C ++自定义数据容器)

时间:2019-01-28 16:59:23

标签: c++

我想在构造数组时传递作为数据容器一部分的数组的大小。我不允许使用STL。

这是针对我大学的家庭作业计划。我尝试为此使用构造函数,但是它不起作用。

struct T
{
    node *head, *tail;
    T()
    {
        head=NULL;
        tail=NULL;
    }
};

struct node
{
    int a;
    float array[a];
    node *next;
    node(int b) : a(b) {}
};

int main()
{
    ...
}

代码不完整,因为我被卡在这里。只是为了可视化我想要实现的目标。

2 个答案:

答案 0 :(得分:2)

在结构中将float array[a];替换为float * array;

struct node
{
    int a;
    float * array;
    node *next;
    node(int b) : a(b) {}
};

您将可以管理任意大小

您必须确定在node()的参数中是否给出了float*,可能都是:

struct node
{
    int a;
    float * array;
    node *next;
    node(int b, float * ar) : a(b), array(ar), next(NULL) {}
    node(int b) : a(b), next(NULL) { array = new float[a]; }
};

然后需要一个析构函数来删除数组

struct node
{
    int a;
    float * array;
    node *next;

    node(int b, float * ar) : a(b), array(ar), next(NULL) {}
    node(int b) : a(b), next(NULL) { array = new float[a]; }
    ~node() { if (array != NULL) delete [] array; }
};

以及更多:复制构造函数,operator =,取决于您的C ++版本,也可能是 move

答案 1 :(得分:1)

使用指向数组的指针并在构造函数中分配,并在析构函数中释放。像下面这样。

float *array;
node(int b) : a(b)
{
    array = new float[b];
}

~node()
{
    delete[] array;
}