-1

首先为链表创建一个复制构造函数很困难,现在这个堆栈。我几乎想用什么东西砸我的头,但后来我想到了 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);

我不知道如何在地球上访问 otherStack 元素。我的意思当然是它的链表。但它在 Stack.cpp 中,我可以做些什么来访问它以及如何为这个堆栈创建一个复制构造函数(工作代码会更好)。这次请多多支持。谢谢。注意:您不能更改任何构造函数。它必须是这样的。我希望这次每个人都能得到我的询问。

4

1 回答 1

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)。

于 2013-02-10T15:30:59.893 回答