gpt4 book ai didi

c++ - 链接 ArrayList 实现

转载 作者:行者123 更新时间:2023-11-28 07:17:33 25 4
gpt4 key购买 nike

我正尝试在 C++ 中实现一个 Linked ArrayList 以用于指令目的,但我遇到了一个障碍,我不确定如何解决它。我的指针数组似乎不是由指针组成,而是由实际对象组成。

让我的代码尽可能简短。

//数组列表.h//

class classArrayList {
private:
class Node {
Node();
//accessors

};
Node* classArray;

public:
classArrayList();
};

//数组列表.cpp//

classArrayList::classArrayList() {
Node* node = new Node();
this->setHead(node);
this->setMaxSize(5);
classArray = new Node[5];
this->classArray[0] = *node;
this->setSize(1);
}

void classArrayList::deleteNode( int index ) {
Node* my_current = &this->classArray[index];
//blahblah
}

但是当我去删除一个节点时,“my_current”并没有链接到这个列表中的下一个或上一个节点。尝试在零位置删除,没有下一个。

所以肯定有一个有数据的节点,但它没有它的链接,但是检查调试器我的链接列表很好并且可以工作,所以无论数组指向什么,它都搞砸了。

因此,与其指向列表,不如指向唯一实例,我该如何解决这个问题?

我向数组添加新内容的代码是:this->classArray[some_index] = *new_node;

澄清一下,我希望能够有一个数组依次指向我的链接列表中的每个对象。然后当我在我的数组列表中的任何 n 处请求一个时,将它引用到一个指针,然后通过它在数组中的位置对我的列表中的对象进行细化,而不是在列表中递增直到找到我想要的第 n 个.

最佳答案

使您的 classArray 成为双指针并创建一个 Node 指针数组。 Node* classArray; 将列表的头部地址复制到每个数组。

classArray = new Node*[5];

在你的代码中,你的声明 this->classArray[0] = *node; 你没有存储新创建的地址,而是新创建节点的内容。通过删除,您并没有删除动态创建的列表头。

要复制新创建的列表的地址,你应该使用

 this->classArray[0] = node;

关于c++ - 链接 ArrayList 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com