使用链接列表复制堆栈的构造函数

时间:2013-02-10 15:11:54

标签: c++

首先为链表制作复制构造函数很困难,现在这个堆栈。我几乎想用一些东西打我的脑袋然后我想到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中,我该怎么做才能访问它,以及如何为这个堆栈创建一个复制构造函数(工作代码会更好)。这次请支持。谢谢。 注意:您不能更改任何构造函数。它必须是它的方式。我希望这次每个人都能得到我的疑问。

1 个答案:

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