Mehrdimensionaler Vector?
-
Hey @all,
und zwar habe ich schon bemerkt, das ich öfters mal ein mehrdimensionales Array brauche, das dynamisch angelegt werden soll, deshalb habe ich mir gedacht, es mit Vector zu realisieren Bsp:vector< <string,int,string> > myVector;
Mein Problem ist nun der Zugriff auf die Elemente bei map ginge es mit MyVec->first und MyVec->second, nur wie funktiniert das beim Vector?
MfG smog_at
-
vector< <string,int,string> > myVector;
also so wird das nix
probiers mal mit
vector< vector< string > > myVector;
du kannst den op[] benutzen, für den Zugriff:
myVector[x]; //Zugriff auf vector<string>-Element myVector[x][y]; //Zugriff auf string-Element myVector[x][y][z]; //Zugriff auf char-Element
-
Kann ich es nicht so auch machen, oder so ähnlich?
Mir fehlt diesbezüglich nur ein kleiner Anstoßclass Irgendwas { public: string Str1, Str2; int Int1; }; . . . class Test () { vector <Irgendwas> MyVec; }
oder müsste ich es so machen:
class Test () { class Irgendwas { public: string Str1, Str2; int Int1; }; vector <Irgendwas> MyVec; }
MfG smog_at
-
Das wird kein Standardcompiler durchgehen lassen!
am Ende der umschließenden Klasse fehlt ein ; und nach dem Namen kommt (), das gibts so nicht!!mfg
Glamdring
-
Weil das was ich geschrieben hat eh keiner vbersteht kommts hier nochmal:
Roman1311 schrieb:
class Test () { //Was soll das () bedeuten? class Irgendwas { public: string Str1, Str2; int Int1; }; vector <Irgendwas> MyVec; }//hier fehlt ein Strichpunkt
So sollte es jeder verstehen
mfg
Glamdring
-
@Glamdrink: Ja, so wie du das am Sschluss geschrieben hast, meinte ich es, da sind mir ein paar Schlampigkeitsfehler reingerutscht
wie übergebe ich nun dem Vector MyVec mit push_back den Inhalt? Und wie kann ich beim Lesen darauf zugreifen?
MyVec.push_back("String1", "String2", 12);
funktioniert nämlich nicht
MfG smog_at
-
1. Du solltest den Vector in die public-Schnittstelle schieben, sonst kannst du erstmal gar nichts pushen.
2. Dann solltests du Irgendwas einen Standardkonstruktor spendieren, der zwei Strings und ein int übernimmt und diese den Variablen zuteilt.
3. Dann:
Test var; var.Myvec.push_back(Irgendwas("String1", "String2", 12));
mfg
Glamdring
-
Also, ich habe mal folgendes probiert:
#include <iostream> #include <vector> using namespace std; class Test { class Irgendwas { public: string Str1; string Str2; int Int1; }; vector <Irgendwas> MyVec; public: Test(); ~Test(); }; Test::Test() { this->MyVec.push_back(Irgendwas("String1", "String2", 12)); } Test::~Test() { } int main() { Test *myTest = new Test(); return 0; }
Jedoch wenn ich diesen Code kompiliere erscheint folgende Fehlermeldung:
classclass.cpp: In constructor `Test::Test()': classclass.cpp:21: no matching function for call to `Test::Irgendwas::Irgendwas (const char[8], const char[8], int)' classclass.cpp:7: candidates are: Test::Irgendwas::Irgendwas() classclass.cpp:7: Test::Irgendwas::Irgendwas(const Test::Irgendwas&)
Wo liegt da der Fehler?
Vielen Dank im VorausMfG smog_at
-
Der Standardkonstruktor von irgendwas fehlt:
#include <iostream> #include <vector> using namespace std; class Test { class Irgendwas { public: string Str1; string Str2; int Int1; Irgendwas(string p, string p2, int i1); ~Irgendwas(){} }; vector <Irgendwas> MyVec; public: Test(); ~Test(); }; Test::Irgendwas::Irgendwas(string p, string p2, int i1) { Str1 = p; Str2 = p2; Int1 = i1; } Test::Test() { this->MyVec.push_back(Irgendwas("String1", "String2", 12)); } Test::~Test() { } int main() { Test *myTest = new Test(); return 0; }
So müsste es gehen
mfg
Glamdring
-
Nein,
main muss so aussehen:int main() { Test var; return 0; }
Oder:
int main() { Test *myTest = new Test(); delete myTest; //sonst gibts ein Speicherloch!!! return 0; }
mfg
Glamdrink