【发布时间】:2017-04-22 13:09:56
【问题描述】:
我有一个名为 myList 的自定义列表,其工作方式如下:
// creating and adding:
myList<int> numbers;
numbers.add(10);
numbers.add(20);
// listing each item:
int n
while (numbers.nextItems(n)) {
std::cout << m;
}
这是myList的源代码:
template<class T>
class myList
{
struct eachItem
{
T data;
eachItem *nextItem;
eachItem(eachItem *p = NULL)
{
nextItem = p;
}
}; // end of eachItem
eachItem *beginning;
eachItem *current;
myList(const myList&);
public:
myList()
{
current = beginning = new eachItem;
}
void add(const T& dat);
bool nextItems(T& dat);
~myList();
};
template <class T>
myList<T>::~myList()
{
eachItem *p;
while ((p = beginning) != NULL)
{
beginning = p->nextItem;
delete p;
}
}
template <class T>
void myList<T>::add(const T& dat)
{
eachItem *eachI;
for (eachI = beginning; eachI->nextItem != NULL; eachI = eachI->nextItem);
eachItem *newList = new eachItem(*eachI);
eachI->data = dat;
eachI->nextItem = newList;
}
template <class T>
bool myList<T>::nextItems(T& dat)
{
if (current->nextItem == NULL)
{
current = beginning;
return(false);
}
dat = current->data;
current = current->nextItem;
return(true);
}
现在,我想为这个自定义列表类添加一个删除功能。我希望它像这样工作:
numbers.remove(10)
我尝试了很多不同的方法,但都无法奏效。
这是我的尝试:
template <class T>
void myList<T>::remove(const T& dat)
{
eachItem *eachI;
for (eachI = beginning; eachI->nextItem != dat; eachI = eachI->nextItem);
eachItem *newList = new eachItem(*eachI);
eachI->nextItem = newList;
eachItem *eachI2; // from the deleted to the actual end
for (eachI2 = eachI->nextItem; eachI2->nextItem != NULL; eachI2 = eachI2->nextItem);
eachItem *newList2 = new eachItem(*eachI2);
eachI2->nextItem = newList2;
}
【问题讨论】:
-
展示你的尝试并解释他们的问题
-
另外,请格式化您的代码 - 每行代码之间不需要这么多空格(使其更难阅读)
-
对不起,原来的变量类型不是int,我只是为了更简单把它改成了int,我把删除的部分删掉了,对不起
-
显示您的“不工作”删除代码。
-
我现在添加了。