c ++中的递归数据结构

时间:2014-03-04 18:06:46

标签: c++ class data-structures

我正在使用类在c ++中实现递归数据结构。我在使用“this”指针时遇到了一些麻烦。

在一个函数中,我需要修改“this”指针。但是这是不允许的。我该怎么做?我在某处读到你需要将“this”指针传递给该函数来改变它。但是我不清楚这一点。这表现得像python的“自我”吗?一个例子很棒

编辑:

void insert(int key)
{
    if (head == NULL)
    {
        /* I need to insert in beginning of structure */
        List* tmp;
        tmp->key = key;
        tmp->next = this;
        this = tmp;  /* This does not work */
    }
}

谢谢!

3 个答案:

答案 0 :(得分:2)

您无法修改this指针,因为它的行为就像声明T* const一样。你可以做的是在类中保存一个指向你自己类型的指针,并修改它。

class foo
{
    /* ... */
private:
    foo* p; // this can be modified
};

答案 1 :(得分:1)

您无法修改this,期间。您需要重新构建程序,以便不需要这样做。

答案 2 :(得分:0)

插入您尝试的方式的最佳方法是创建双链表,而不是单个链表(只有下一个指针)。换句话说,您应该有一个指向列表中上一个节点的先前指针,以便使用this指针正确插入。否则,您需要从此节点的父节点插入。

即使用双链表:

Node* tmp = new Node;
tmp->key = key;
this->previous->next = tmp;
tmp->previous = this->previous;
tmp->next = this;
this->previous = tmp;

编辑: 不要忘记"这个"是""简单地""一个内存地址,所以你要改变的是它包含的内容。