[C++] Extension de std :: liste


Answers

En fonction de vos besoins, vous devez utiliser std::vector (si vous avez souvent besoin d'ajouter / supprimer à la fin, et un accès aléatoire), ou std::deque (si vous avez souvent besoin d'ajouter / supprimer à la fin ou au début, et votre jeu de données est énorme, et veut toujours un accès aléatoire). Voici une bonne photo qui vous montre comment prendre la décision:

Container Choice http://adrinael.net/containerchoice.png

Question

J'ai besoin d'utiliser des listes pour mon programme et j'ai besoin de décider si j'utilise std :: vector ou std :: list. Le problème avec le vecteur est qu'il n'y a pas de méthode remove et avec list qu'il n'y a pas d'opérateur []. J'ai donc décidé d'écrire ma propre classe en étendant std :: list et en surchargeant l'opérateur [].

Mon code ressemble à ceci:

#include <list>

template <class T >
class myList : public std::list<T>
{
public:
T operator[](int index);
T operator[](int & index);
myList(void);
~myList(void);
};

#include "myList.h"

template<class T>
myList<T>::myList(void): std::list<T>() {}

template<class T>
myList<T>::~myList(void)
{
std::list<T>::~list();
}

template<class T>
T myList<T>::operator[](int index) {
int count = 0;
std::list<T>::iterator itr = this->begin();
while(count != index)itr++;
return *itr;    
}

template<class T>
T myList<T>::operator[](int & index) {
int count = 0;
std::list<T>::iterator itr = this->begin();
while(count != index)itr++;
return *itr;
}

Je peux le compiler mais j'obtiens une erreur d'éditeur de liens si j'essaie de l'utiliser. Des idées?




Il n'est pas nécessaire d'appeler destructor de std :: list, car vous dérivez déjà de std :: list quand destructor appelle myList automatiquement. Std :: list destructor sera appelé.




Les vecteurs ont la méthode d'effacement qui peut supprimer des éléments. Est-ce que ce n'est pas suffisant?




Vous devez déplacer tout le code de votre modèle dans l'en-tête.