Collection in C++?
-
Die Zahl der Elemente in einem std::vector ist genauso dynamisch. Jedes mal wenn du ein Element mit push_back hinzufügst, wächst der vector in seiner Größe um 1. Das geschieht völlig automatisch und gilt auch für alle anderen Container in der STL. War das dein Problem?
Du musst dir auch keine eigene Collection-Klasse basteln wie in VB6. Wenn du eine Collection von ints willst, schreibst du std::vector<int>.
-
Okay... so langsam fängt es an Spaß zu machen. Jetzt habe ich gerade das hier zusammengeschrieben und zumindest der Zugriff scheint zu klappen. Für das erase hab ich schon zwei Versionen gefunden, die nicht funktionieren.

#include <iostream> #include <vector> #include "Vektor.h" using namespace std; int main() { vector<Vektor> a; Vektor b; b.set_x (3); a.push_back (b); b.set_x (5); a.push_back (b); b.set_x (8); a.push_back (b); cout << a.at(0).get_x(); cout << a.at(1).get_x(); cout << a.at(2).get_x(); a.erase(1); //geht nicht a.erase(a.at(1)); //geht auch nicht a.erase(0); //stürzt fürchterlich ab cout << a.at(1).get_x(); return 0; };Wie schaffe ich es, ein bestimmtes Element zu löschen? und vor allem: Wie wirkt sich das auf die Indizes aus? Ist der Index weg oder werden die Indizes wie in Vb der Reihenfolge nach neu vergeben?
Und außerdem: Kann man zu einem Index noch ein Schlüsselwort vergeben oder muss man sich das manuell erprogrammieren?
-
Was heißt "geht nicht"? - Ich habe gerade keinen C++-Compiler da. erase() erwartet einen iterator, ich weiß gerade nicht auswendig, ob ein Index in einen Iterator umgewandelt werden kann. Die Indizes werden auf jeden Fall neu vergeben.
Und außerdem: Kann man zu einem Index noch ein Schlüsselwort vergeben oder muss man sich das manuell erprogrammieren?
Du hast die Möglichkeit eine Map zu verwenden. Dann kannst du zum Beispiel bei einer map<std::string, Vektor> so den passenden Vektor holen: map["blabla"].
-
bei 'a.erase(1); ' hieß geht nicht:
error C2664: 'class Vektor *__thiscall std::vector<class Vektor,class std::allocator<class Vektor> >::erase(class Vektor *)' : Konvertierung des Parameters 1 von 'const int' in 'class Vektor *' nicht moeglich. Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
bei 'a.erase(a.at(1));' hieß es:
error C2664: 'class Vektor *__thiscall std::vector<class Vektor,class std::allocator<class Vektor> >::erase(class Vektor *)' : Konvertierung des Parameters 1 von 'class Vektor' in 'class Vektor *' nicht moeglich. Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
Fehler beim Ausführen von cl.exe.Ich habs gerade so gelöst: a.erase(a.begin() + 1);
Vielen Dank nochmal. Das mit der Map werde ich demnächst auch probierenm, klingt nach einer guten Lösung.
MfG
Sven
-
nim CArray!!
CArray<deinObjektTyp,deinObjektTyp> arraylist;
deinObjektTyp a;
deinObjektTyp b;
deinObjektTyp c;arraylist.add(a);
arraylist.add(b);
arraylist.add(c);arrayLisr.RemoveAt(INDEX);
-
Hey ho!
CArrey klingt auch nicht schlecht.... ich habe gerade mit
CArray<Vektor,int> VList; //(stimmt das so?)versucht etwas zu erstellen, aber es geht noch nicht ("error C2065: 'CArray' : nichtdeklarierter Bezeichner"). Kann das daran liegen, dass ich mit einer Konsolenanwenung arbeite? Kann ich CArray über irgendein #include nutzbar machen / sollte ich ganz auf MFC umsteigen?
-
Wenn Du in einem MFC-Forum postest, gehat man eigentlich davon aus, dass Du MFC verwendest...
Wenn Du ein Konsolen-Projekt hast, kannst Du beim Erzeugen auch angeben, ob Du MFC haben willst.
Beim Umstellen von Hand musst Du ein paar Projektsettings machen und die Includes einbinden... (müsste jetzt aber auch zuerst eines mit dem Wizar angelegen, dann würde ich sehen was man machen muss).Ansonsten nimm doch "std::vector". Was geht denn damit nicht?
-
Naja, ich hatte auf der Startseite einfach auf Visual C++ geklickt und war hier gelandet, ohne überhaupt zu wissen was MFC ist.
So kam das...std::vector geht auch, ich wollte nur beide mal ausprobieren, vor allem, weil mir der zweite noch etwas praktischer erschien...
Was ist eigentlich der Unterschied zwischen MFC und einer Win-32-Anwendung? Ist MFC mehr für das bearbeiten von Dateien vorgesehen?
-
-
Hmm, den hatt ich schon überflogen, aber danke trotzdem.
