我怎么能用c ++创建一个列表?

jes*_*iel 29 c++ stl linked-list list

如何在C++中创建列表?我需要它来创建一个链表.我该怎么做呢?我可以遵循哪些好的教程或示例?

Joh*_*itb 43

我认为你知道C++已经有了一个链表类,你想要实现自己的,因为你想学习如何去做.

首先,阅读为什么我们使用数组而不是其他数据结构?,其中包含基本数据结构的良好答案.然后考虑如何在C++中对它们进行建模:

struct Node {
    int data;
    Node * next;
};
Run Code Online (Sandbox Code Playgroud)

基本上,这就是实现列表所需的全部内容!(一个非常简单的).然而它没有抽象,你必须链接每手的项目:

Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
Run Code Online (Sandbox Code Playgroud)

现在,您已经拥有了一个链接的节点列表,这些节点都在堆栈中分配:

d -> c -> b -> a
42   35   20   1
Run Code Online (Sandbox Code Playgroud)

下一步是编写一个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;
    }

    // ...
};
Run Code Online (Sandbox Code Playgroud)

下一步是使List成为模板,以便您可以填充其他值(不仅仅是整数).

如果您熟悉智能指针,则可以替换使用智能指针的原始指针.通常我会发现人们会向初学者推荐智能指针.但在我看来,你应该先了解为什么你需要智能指针,然后使用它们.但这需要您首先了解原始指针.否则,你会使用一些神奇的工具,却不知道为什么需要它.


Rod*_*ddy 22

你应该使用标准的List类.当然,除非这是一个家庭作业问题,否则您想知道STL如何实施列表.

你可以通过谷歌找到很多简单的教程,比如这个.如果您想知道链接列表是如何工作的"引擎盖",请尝试搜索C列表示例/教程而不是C++.

  • 抱歉..我是靠自己学习,而不是从学校学习 (3认同)

kar*_*erx 15

如果要使用std::list,则需要传递类型参数:

list<int> intList;  
list<int>* intListPtr = new list<int>;
Run Code Online (Sandbox Code Playgroud)

如果你想知道列表是如何工作的,我建议使用谷歌搜索一些C/C++教程来了解这个主题.然后,下一步将学习足够的C++来创建列表类,最后是列表模板类.

如果您有更多问题,请回复此处.


mep*_*ell 8

为什么重新发明轮子.只需使用STL列表容器即可.

#include <list>

// in some function, you now do...
std::list<int> mylist; // integer list
Run Code Online (Sandbox Code Playgroud)

更多信息...

  • std :: list是一个参数化类型,new返回一个指针,你的例子应该更像:list <int>*mylist = new list <int>; 或者更好,简单地说:list <int> mylist; (3认同)