Template <vector>
-
evox schrieb:
gib der Compiler mir folgenden Fehler aus:
error C2039: 'push_back': Ist kein Element von 'DataListe'
Diese Meldung passt jetzt überhaupt nicht zum Rest des Beitrags. Außerdem wäre es von Vorteil, wenn du nicht nur einige Fragmente, sondern ein zusammenhängendes compilierbares Beispiel zeigst.
PS: Dir ist hoffentlich klar, daß die STL-Container nicht für Vererbung vorgesehen sind? Und was genau willst du damit erreichen?
-
Außerdem: Warum verwendest du hier new? Kommst du aus Java? Dann gewöhne dir das schnell mal ab.
-
Damit die dynamische Speicherverwaltung (genauer gesagt die Zerstörung) bei abgeleiteten Klassen gut geht, muss ihre Base einen virtuellen Destruktor haben.
EDIT: Die Container der STD bieten den nicht an...
-
vielen danke für die vielen antworten
ich wollte halt nur einen anderen namen verwenden
habs jetzt mit typdef gemacht und es leuftda ich mich nich so besonders mit templates auskennen wollt ich
fragen ob mir jemand den sagen kann wie ich einen dynamischen vektor
erstellen kann?er soll m einträge haben und nach hinten halt offen sein zum einfügen
quasi eine m x erweiterbare matrix?für einen tipp wäre ich sehr dankbar
-
evox schrieb:
wie ich einen dynamischen vektor erstellen kann?
Was verstehst du unter einem dynamischen vector?
quasi eine m x erweiterbare matrix?
ne matrix ist was anderes als ein vector. Sonst hätte ich gesagt du suchst std::vector.
Schau dir im Buch deiner Wahl mal das Kapitel über Container an.
-
also ich will wie ich das ja oben versucht hatten eine tabelle anlegen
die m einträge groß ist (wird der funktion als argument übergeben)
und belibig nach hinten erweitert werden kann (push_back)mit std:vector hast du recht das will ich aber wie?
-
evox schrieb:
die m einträge groß ist (wird der funktion als argument übergeben)
und belibig nach hinten erweitert werden kann (push_back)mit std:vector hast du recht das will ich aber wie?
Ein vector wächst bei Bedarf (push_back), in sofern passt er wohl (wobei man bei einer bekannten Größe ihn entsprechend groß auslegen [reserve] sollte um häufige Vergrößerungen zu vermeiden).
Du solltest erst einmal schaffen deine Fragen und Probleme konkreter und verständlicher zu beschreiben, vielleicht mit einem Minibeispiel.
-
Du kannst auch einen Vektor nehmen, der seinerseits Vektoren verwaltet:
std::vector<std::vector<std::string> > meinedaten;
-
Solange man in der abgeleiteten Klasse keinen seperaten Destruktor braucht (also keine neuen Datenmember hinzufügt bzw nur PODs) spricht absolut nichts dagegen, von STL-Containern abzuleiten.
-
Ok ein bespiel:
ich will sowas wie eine hashtabelle erstellen die eine größe m hat und in der elemente bei kollision angehängt werden also quasi
der vector h[1][i] enthält alle elemente die den hashschlüssel 1 erhalten
die vectoren h[2][k] alle elemente mit hashschlüssel 2 usw. bis mDu kannst auch einen Vektor nehmen, der seinerseits Vektoren verwaltet:
C/C++ Code:
std::vector<std::vectorstd::string > meinedaten;so hatte ich mir das gedacht nur wie lasse ich jetzt m einfließen?
-
evox schrieb:
so hatte ich mir das gedacht nur wie lasse ich jetzt m einfließen?
Nur falls ich dich richtig verstehe (da du dein m nicht darstellst):
std::vector<std::vector<std::string> > meinedaten; // Erstes Element (h[0]] mit Vektor für die untergeordneten Elemente meinedaten.push_back(std::vector<std::string>()); // Die Elemente unterhalt h[0] einfügen (Beispiel) for(int i=0; i<10; ++i) meinedaten[0].push_back("Test"); // Stellvertretend für die Werte... // Zugriff wäre jetzt mit h[0][0] bis h[0][9] möglich (Besser natürlich über Iteratoren). // Zweites Element (h[1]] mit Vektor für die untergeordneten Elemente meinedaten.push_back(std::vector<std::string>()); //...P.S: Mehrfach korrigiert, da ich immer an dein Beispiel mit Index 1 als beginn gedacht habe, der Index beginnt in C++ aber immer mit 0.
-
asc schrieb:
P.S: Mehrfach korrigiert, da ich immer an dein Beispiel mit Index 1 als beginn gedacht habe, der Index beginnt in C++ aber immer mit 0.
ok sorry ich meinte natürlich der vektor soll von 0 bis m-1 laufen die
jeweils wider vektoren enthalten
-
evox schrieb:
asc schrieb:
P.S: Mehrfach korrigiert, da ich immer an dein Beispiel mit Index 1 als beginn gedacht habe, der Index beginnt in C++ aber immer mit 0.
ok sorry ich meinte natürlich der vektor soll von 0 bis m-1 laufen die
jeweils wider vektoren enthaltenWas in meinen Beispiel ja gezeigt wird.
Ganz davon abgesehen... Meine Rechtschreibung mag schon nicht gut sein, aber du solltest deine Texte dennoch zweimal lesen, da sie teilweise nur schwer verständlich sind (Und Beispielsweise haben die Wörter "wider" und "wieder" eine nahezu gegensätzliche Bedeutung).
-
asc schrieb:
std::vector<std::vector<std::string> > meinedaten; // Erstes Element (h[0]] mit Vektor für die untergeordneten Elemente meinedaten.push_back(std::vector<std::string>()); // Die Elemente unterhalt h[0] einfügen (Beispiel) for(int i=0; i<10; ++i) meinedaten[0].push_back("Test"); // Stellvertretend für die Werte... // Zugriff wäre jetzt mit h[0][0] bis h[0][9] möglich (Besser natürlich über Iteratoren). // Zweites Element (h[1]] mit Vektor für die untergeordneten Elemente meinedaten.push_back(std::vector<std::string>()); //...habs jetzt probiert und es ist genau das was ich wollte danke

P.S. Sorry für die Rechtschreibung werde dran Arbeiten
-
so jetzt hab ich das nächste problem:
hab das jetzt alles soweit eingearbeitet:
Tabelle(int m){ vector<DatenVektor> t ; //typedef vector<Data> DatenVektor; groesse = m; } void Add (const Data& data) { unsigned int i = data.func(groesse); ht[i].push_back(data); }func liefert mir einen schlüssel zurück (ähnlich einer hashfunktion), diese funktioniert auch.
erstellen kann ich das auch aber beim debuggen kommt
Eine nicht behandelte Ausnahme des Typs "System.AccessViolationException" ist in List.exe aufgetreten.
Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
kann mir jemand helfen? sitz schon den ganzen tag dran
ach ja wahlweise kommt auch
Expression: vector subscript out of range
mit dem verweis auf
bool _Inside(const _Ty *_Ptr) const { // test if _Ptr points inside vector return (_Ptr < this->_Mylast && this->_Myfirst <= _Ptr); }im vector template
-
Was ist denn ht[i] und existiert das überhaupt? Ich wette nicht.
-
natürlich t nicht ht sorry vertippt
-
Dann ändere die Frage dahin, ob t[i] existiert. Ich wette weiterhin dagegen.
-
t wird doch hier erzeugt:
vector<DatenVektor> toder lieg ich da falsch
-
In dem Konstruktor fehlt wahrscheinlich
t.resize(groesse);Edit: Oder besser direkt eine Initialisierungsliste nutzen.