Ich fange an, C++ zu lernen und als Übung beschließen, eine einfache LinkedList
Klasse zu implementieren (unten gibt es einen Teil des Codes). Ich habe eine Frage bezüglich der Art, wie der Kopierkonstruktor implementiert werden sollte und wie die Daten auf dem Original LinkedList
am besten zu erreichen sind.LinkedList Kopieren Konstruktor Implementierungsdetails
template <typename T>
class LinkedList {
struct Node {
T data;
Node *next;
Node(T t, Node *n) : data(t), next(n) {};
};
public:
LinkedList();
LinkedList(const LinkedList&);
~LinkedList();
//member functions
int size() const; //done
bool empty() const; //done
void append(const T&); //done
void prepend(const T&); //done
void insert(const T&, int i);
bool contains(const T&) const; //done
bool removeOne(const T&); //done
int removeAll(const T&); //done
void clear(); //done
T& last(); //done
const T& last() const; //done
T& first(); //done
const T& first() const; //done
void removeFirst(); //done
T takeFirst(); //done
void removeLast();
T takeLast();
//delete when finished
void print();
//end delete
//operators
bool operator ==(const LinkedList<T> &other) const; //done
bool operator !=(const LinkedList<T> &other) const; //done
LinkedList<T>& operator =(const LinkedList<T> &other); //done
private:
Node* m_head;
Node* m_tail;
int m_size;
};
template<typename T>
LinkedList<T>::LinkedList() : m_head(0), m_tail(0), m_size(0) {
}
...
Sollte mein Copykonstruktor Zugriff auf die Daten auf jedem Knoten des ursprünglichen LinkedList
direkt?
template<typename T>
LinkedList<T>::LinkedList(const LinkedList& l) {
m_head = 0;
m_tail = 0;
m_size = 0;
Node *n = l.m_head;
// construct list from given list
while(n) {
append(n->data);
n = n->next;
}
}
Oder sollte ich auf die Daten über den entsprechenden Accessor zugreifen? (Ich weiß, dass ich die Accessoren nicht definiert habe).
Ich beabsichtige auch, einen benutzerdefinierten Iterator zu erstellen, so dass es möglich ist, über die LinkedList
zu iterieren. Soll ich im Kopierkonstruktor auf die Daten auf jedem Knoten zugreifen?
Eine andere Frage (komplett vom Thema, ich weiß), wann und/oder warum sollten wir einen Zeiger auf eine LinkedList
LinkedList<int> *l = new LinkedList<int>();
statt
LinkedList<int> l;
Vielen Dank !! :) – bruno