-1

最初にリンクされたリストのコピー コンストラクターを作成するのは困難でしたが、現在はこのスタックです。何かで頭を殴りたかったのですが、スタックオーバーフローの人たちのことを考えました。ここに問題があります: 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()
{
}

0 から 100 までの elem を含むオブジェクト s があります。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()); }
};

List のコピー コンストラクターを使用してメンバーをコピーするため、Stack のコピー コンストラクターを定義する必要はありませんdata(これは の唯一のデータ メンバーでStackあるため、コピーするだけで をコピーできますStack)。

于 2013-02-10T15:30:59.893 に答える