Ich brauche Listen für mein Programm und musste entscheiden, ob ich std :: vector oder std :: list verwenden. Das Problem mit dem Vektor ist, dass es keine Entfernungsmethode gibt und bei der Liste gibt es keinen Operator []. Also habe ich beschlossen, eine eigene Klasse zu schreiben, die std :: list erweitert und den Operator [] überlädt.Erweitern std :: list
Mein Code sieht wie folgt aus:
#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;
}
Ich kann es kompilieren, aber ich bekomme einen Linker-Fehler, wenn ich versuche, es zu benutzen. Irgendwelche Ideen?
Sie haben 'T Operator [] (int index);' und 'T Operator [] (int & index);' Sie können aber möchte stattdessen 'T & operator [] (int index)' und 'const T & operator [] (int index) const 'verwenden. Innerhalb dieser Funktionen können Sie auch 'while (index -)' anstelle einer neuen Variablen verwenden, um die Anzahl zu überwachen. – Dennis