У меня есть стек класса, который определяется следующим образом:выполнения глубокого копирования в конструктор копирования
#ifndef STACK_H
#define STACK_H
#include "MyException.h"
#include <iostream>
using namespace std;
template<class T>
class Stack;
template<class T>
ostream& operator<<(ostream&,Stack<T>&);
template<class T>
class Stack
{
public:
friend ostream& operator<< <T>(ostream&,Stack<T>&);
/*The constructor for the Stack class*/
Stack();
/*The copy constructor*/
Stack(const Stack<T>& other);
Stack<T>& operator=(const Stack<T>& other);
/*The destructor for the stack class*/
~Stack();
void push(const T& el);
T pop();
bool isEmpty();
private:
/*The node class.*/
class Node
{
public:
Node(const T& data, Node* n = 0)
{
element = data;
next = n;
}
T element;
Node* next;
};
/*The top of the stack*/
Node* top;
};
#include "Stack.C"
#endif
И я должен выполнить глубокую копию на мой конструктор копирования. Но то, что я сделал, это создать временный массив и скопировать все элементы в объекте, полученном параметром, в массив, а затем узел в массив, а затем поместить все их в узел, определенный в классе Stack. Это, как я это сделал:
template<class T>
Stack<T>::Stack(const Stack<T>& other)
{
top = NULL;
if(other.top == NULL)
{
this->top=NULL;
}
else
{
Node* count;
count= other.top;
int num=1;
while(count->next != NULL)
{
num++;
count = count->next;
}
cout<<"test"<<endl;
T arr[num];
arr[0] = other.top->element;
Node* count2;
count2= other.top;
for(int i = 1 ; i<num; i++)
{
arr[i] = count2->next->element;
count2 = count2->next;
}
T temp;
for(int i =0, j=num-1; i<num/2 ; i++, j--)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for(int i =0; i<num; i++)
{
push(arr[i]);
cout<<arr[i]<<endl;
}
}
}
Можно предположить, что мой толчок (сопзЬ T & эл) и поп() работает отлично. Может ли кто-нибудь помочь мне выполнить глубокую копию?
Когда N находится в размере массива, не стоит выделять его на стек. Первый цикл while while должен быть достаточным для инициализации узлов объекта. – bobah
Вы делаете это waaaay более сложным здесь, чем вам нужно ... Все это можно сделать за один цикл, как говорит баба. –
@bobah Я поставил там счетчик, чтобы узнать, какой размер моего стека - os, который я могу использовать в моих циклах. – beckinho