Je commence à apprendre C++ et comme un exercice décident d'implémenter une classe LinkedList
simple (Ci-dessous, il y a une partie du code). J'ai une question concernant la façon dont le constructeur de copie devrait être mis en œuvre et la meilleure façon d'accéder aux données sur l'original LinkedList
.LinkedList détails d'implémentation de constructeur de copie
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) {
}
...
Si mon accès constructeur de copie des données sur chaque nœud du LinkedList
d'origine directement?
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;
}
}
Ou devrais-je accéder aux données via l'accesseur correspondant? (Je sais que je n'ai pas l'accesseur (s) défini).
En outre, j'ai l'intention de créer un itérateur personnalisé afin qu'il puisse être possible de parcourir le LinkedList
. Dois-je utiliser dans le constructeur de copie pour accéder aux données sur chaque nœud?
Une autre question (complètement hors-sujet, je sais), quand et/ou pourquoi devrions-nous déclarer un pointeur vers une LinkedList
LinkedList<int> *l = new LinkedList<int>();
au lieu de
LinkedList<int> l;
Merci beaucoup !! :) – bruno