Ich versuche, eine Klasse von Objekten namens Tableaus zu schaffen, die Vektoren von unsigned ints im Wesentlichen Vektoren sind (sie sind wie Matrizen mit Ausnahme der Zeilen können unterschiedlich lang sein) habe ich geschrieben mit einigen Algorithmen. Das Hauptproblem ist, dass ich Iteratoren für diese Objekte aus der Vektorklasse erben will und ich weiß nicht wie.Wie "erben" Sie einen Iterator von einer STL-Klasse?
Ich habe mehrere verwandte Fragen und Antworten gelesen, und es ist ziemlich einfach für mich, std::vector<std::vector<unsigned int> >
öffentlich zu erben, aber der Konsens ist, dass dies aus Gründen der STL-Container ist nicht mit virtuellen Destruktoren oder was auch immer. Also habe ich beschlossen, zu versuchen, durch Komposition zu "erben". Hier ist ein etwas-minimal Beispiel dafür, was ich versuche zu erreichen:
#include <vector>
#include <iostream>
class tableau {
private:
std::vector<std::vector<unsigned int> > rep;
public:
using std::vector<std::vector<unsigned int> >::iterator;
void push_back(std::vector<unsigned int> const& new_row) {
rep.push_back(new_row);
}
};
int main() {
tableau t1;
std::vector<unsigned int> row1(10);
std::vector<unsigned int> row2(8);
t1.push_back(row1);
t1.push_back(row2);
tableau::iterator it = t1.begin();
for (; it != t1.end(); ++it) {
//display rows of tableau
}
return 0;
}
Aber dann g ++ gibt mir die Fehler: Typen ‚std::vector<std::vector<unsigned int> >
‘ ist kein Basistyp für Typen ‚Tableau‘. Ich fange gerade an, C++ zu lernen, also sei bitte sanft, wenn ich etwas Dummes mache. Wenn Sie mehr von dem tatsächlichen Code, den ich geschrieben habe, wollen, lassen Sie es mich wissen.
Im Allgemeinen ist dies ein sehr guter Testfall. Gut gemacht. :) –