首页 > 解决方案 > 如何制作一个处理双向链表节点的函数?

问题描述

我在 C++ 中实现了双向链表作为类

在 main.cpp 中,我将其他类的对象推送到这个列表中,如下所示

list.insertBack(ClassA(name, description));

但是在那之后我需要改变这个对象的某个字段,例如执行一个改变人口的方法。为此,我需要以某种方式从列表中处理该对象,就像我对常规数组(smth like a[i])所做的那样。为此,我的 List 类中需要一个特殊的方法/函数。我该如何实施?

标签: c++classooptemplatesdoubly-linked-list

解决方案


您只需要operator[]为您的班级提供一个:

template<class T>
class List {

    // your private interface

public:

    // your other public interface 

    T& operator[](unsigned int i)
    {
        Node* n = this->head;
        for (; i>0; --i)
        {
            n = n->next;
        }
        return n->data;
    }
};

在你的主要你可以简单地使用它

int main() {
    List<double> l;
    l.insertBack(0.0);
    l.insertBack(1.0);
    l.insertBack(2.0);
    l.insertBack(3.0);

    std::cout <<  l[2] << std::endl;
}

请注意,您可能还需要const此函数的版本。这是一个演示

注意:正如@Botje 所指出的,您可能还想对输入进行一些完整性检查。如果i等于或大于现有节点的数量,我的代码片段会取消引用 anullptr并且您会得到未定义的行为。


推荐阅读