重载operator []链表

时间:2017-11-19 13:00:20

标签: c++

template<typename T>
int& listvector<T>::operator[](int n)
{   
    Node*p = new Node;
    p->data = NULL;
    for(int i=0;i<n;i++){
        p = p->next;
    }
    p->next = head;
    head = p;

    return head->data;
}

我试图在我的类listvector中重载operator []。此运算符[]用于向列表添加NULL节点(n是返回列表值的位置)。例如,当在主listV [4] = new int(10)中时,表示列表中的NULL NULL NULL NULL 10。在我的代码中,我不知道为什么我不能将NULL分配给0-3只有第一个是NULL。

1 个答案:

答案 0 :(得分:0)

好的,让我们开始工作。

第一个问题是您的节点结构似乎是内部,因此您无法使用operator[]函数来添加新节点。我推断,因为您返回节点中包含的,而不是节点本身。使用索引运算符将节点添加到列表中无论如何都没有任何意义,因为它要求您从零开始创建可能的新列表。

因此,请专注于函数的 getter 版本,该版本获取位置n中现有节点的值。这很简单:

// Function to get the data in element `n`
int operator[](size_t n) const  // Make function `const` since it will not modify the internal data
{
    // Start at the head of the list
    Node* current = head;

    // Loop as long as we don't go of the end of the list and `n` is larger than zero
    // Also decrement `n` after checking its value
    while (current != nullptr && n-- > 0)
    {
        // Make `current` point to the next node in the list
        current = current->next;
    }

    // If `current` is a null pointer, then we have gone of the end of the list, return some default value
    // Otherwise return the value of node we were looking for
    return (current == nullptr ? 0 : current->data);
}

[注意我已经按照你的函数返回类型返回int,即使它应该是T]