我的作业涉及不同的链表操作。其中之一涉及重载方括号运算符,以便能够打印链表的第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 []运算符的任何帮助都将不胜感激。
答案 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;
循环的执行!