如何在C++中创建列表?我需要它来创建一个链表.我该怎么做呢?我可以遵循哪些好的教程或示例?
我认为你知道C++已经有了一个链表类,你想要实现自己的,因为你想学习如何去做.
首先,阅读为什么我们使用数组而不是其他数据结构?,其中包含基本数据结构的良好答案.然后考虑如何在C++中对它们进行建模:
struct Node { int data; Node * next; };
基本上,这就是实现列表所需的全部内容!(一个非常简单的).然而它没有抽象,你必须链接每手的项目:
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
现在,您已经拥有了一个链接的节点列表,这些节点都在堆栈中分配:
d -> c -> b -> a 42 35 20 1
下一步是编写一个List
指向起始节点的包装类,并允许根据需要添加节点,跟踪列表的头部(以下内容非常简化):
class List { struct Node { int data; Node * next; }; Node * head; public: List() { head = NULL; } ~List() { while(head != NULL) { Node * n = head->next; delete head; head = n; } } void add(int value) { Node * n = new Node; n->data = value; n->next = head; head = n; } // ... };
下一步是使List成为模板,以便您可以填充其他值(不仅仅是整数).
如果您熟悉智能指针,则可以替换使用智能指针的原始指针.通常我会发现人们会向初学者推荐智能指针.但在我看来,你应该先了解为什么你需要智能指针,然后使用它们.但这需要您首先了解原始指针.否则,你会使用一些神奇的工具,却不知道为什么需要它.
你应该使用标准的List类.当然,除非这是一个家庭作业问题,否则您想知道STL如何实施列表.
你可以通过谷歌找到很多简单的教程,比如这个.如果您想知道链接列表是如何工作的"引擎盖",请尝试搜索C列表示例/教程而不是C++.
如果要使用std::list
,则需要传递类型参数:
listintList; list * intListPtr = new list ;
如果你想知道列表是如何工作的,我建议使用谷歌搜索一些C/C++教程来了解这个主题.然后,下一步将学习足够的C++来创建列表类,最后是列表模板类.
如果您有更多问题,请回复此处.
为什么重新发明轮子.只需使用STL列表容器即可.
#include// in some function, you now do... std::list
mylist; // integer list
更多信息...