首先为链表制作复制构造函数很困难,现在这个堆栈。我几乎想用一些东西打我的脑袋然后我想到Stack Overflow的家伙。所以这是问题所在: 考虑一件事您甚至无法更改list.h或stack.h或其构造函数。 //在list.h中
template <class T>
struct ListItem
{
T value;
ListItem<T> *next;
ListItem<T> *prev;
ListItem(T theVal)
{
this->value = theVal;
this->next = NULL;
this->prev = NULL;
}
};
/* This is the generic List class */
template <class T>
class List
{
ListItem<T> *head;
public:
// Constructor
List();
// Copy Constructor
List(const List<T>& otherList);
}
// In list.cpp
template <class T>
List<T>::List()
{
head=NULL;
}
template <class T>
List<T>::List(const List<T>& otherList)
{
// I have code working for this part
}
template <class T>
List<T>::~List()
{
}
// In stack.h (includes list.cpp)
template <class T>
class Stack
{
List<T> list;
public:
Stack();
Stack(const Stack<T>& otherStack);
~Stack();
void push(T item);
T top();
T pop();
};
// remember top(); pop(); push() functions are working properly in stack.cpp file.
// In stack.cpp (includes stack.h)
Stack(const Stack<T>& otherStack){
}
template <class T>
void Stack<T>::push(T item)
{
}
template <class T>
T Stack<T>::top()
{
}
template <class T>
T Stack<T>::pop()
{
}
有一个对象s包含从0到100的elem.100位于顶部。 现在我们复制这样的东西: -
Stack<int> s2(s);
我不知道地球上如何访问其他堆元素。我的意思当然是它的链表。但它在Stack.cpp中,我该怎么做才能访问它,以及如何为这个堆栈创建一个复制构造函数(工作代码会更好)。这次请支持。谢谢。 注意:您不能更改任何构造函数。它必须是它的方式。我希望这次每个人都能得到我的疑问。
答案 0 :(得分:2)
假设您的List
复制构造函数正常工作,您的Stack
应该可以正常使用编译器隐式生成的复制构造函数。在这种情况下,堆栈的完整代码可能如下所示:
template <class T>
class Stack {
List<T> data;
public:
void push(T d) { data.add(data.begin(), d); }
T front() { assert(!data.empty()); return data.front(); }
void pop() { asset(!data.empty()); data.delete(data.begin()); }
};
我们不必为Stack定义复制构造函数,因为List的复制构造函数将用于复制data
成员(这是Stack
的唯一数据成员,因此复制它是也足以复制Stack
)。