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。
答案 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
]