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 Voraus

    MfG 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


Anmelden zum Antworten