c ++重载[]打印链表的第n项

时间:2015-12-07 23:25:20

标签: c++ list overloading operator-keyword

我的作业涉及不同的链表操作。其中之一涉及重载方括号运算符,以便能够打印链表的第i个元素。我做了其他一切,但我真的迷失了。这就是我正在使用的。列表类如下:

class List {
public:
// Creates a default empty list
List();

// Simple destructor
~List();

// Insert "data" at the very end of the list
void AddToFront(int data);

// Remove and return the first data item from the list.
int deleteFront();

// Prints the list
void Print() ;

// Returns the size of the list
unsigned int Size() const;


//overloaded assignment operator
Node operator[](unsigned int i) ;



private:

Node *m_head;

};

此外,这是我的节点类:

class Node {
public:
    Node();
    ~Node();
    Node(int data);

    int m_data;
    Node *m_next;
};

对overload []运算符的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

Node* operator [] (int value) {
    Node *temp = this->m_head;
    for(int i = 0; i < value && temp!=NULL; i++) {
        temp = temp->m_next;
    }
    return temp;
}

我假设您要在方括号中返回与指定的value对应的节点。使用operator关键字后跟运算符,然后传递参数,重载任何运算符。

有关详细信息,请查看此:: Operator overloading

编辑::

正如erip和Lajos指出的那样,如果是(value > size_of_list),那么应该有一种方法,在这种情况下,一个可能的解决方案就是抛出异常,你可以稍后在程序中捕获它以显示{{ 1}}出界了。或者考虑当前的实施,如果value value > size_of_list成为temp,那么在执行期间,您可以检查返回的NULL的值是Node *或不。

进一步更优化的方法是在类NULL中保留变量size_of_list,然后我们可以简单地向函数添加List条件,就像这样::

if

对于大型列表,这将更加优化,这样可以避免浪费if(value >= size_of_list) // equal to sign is put, considering your `size_of_list` starts from 1 return NULL; 循环的执行!