Mehrdimensionaler vector



  • Hi Leute.

    Bin bei der Suche auf diesen Thread http://www.c-plusplus.net/forum/viewtopic-var-t-is-101441-and-highlight-is-mehrdimensional.html gestoßen, aber der hilft mir nicht wirklich weiter.

    Ich möchte (um SQL-Ergebnisse zu speichern) einen mehrdimensionalen vector von strings haben. Jedoch weiß ich nicht, wie ich dieses Konstrukt dann mit Werten fülle:

    vector<vector<string> > result;
    


  • vector<string> v;
    v.push_back("Hello");
    result.push_back(v);
    


  • Hallo

    Vielleicht so:

    result[1][1] = "Hallo";
    

    chrische



  • man muss aber erst resize aufrufen.



  • Entweder von außen nach innen:

    while(!ende)
    {
      result.push_back(vector<string>());//neue "Zeile" einfügen
      int pos = result.size()-1;
      for(i = 0;i<Spaltenzahl;++i) result[pos].push_back(spalte[i]);//Zeile auffüllen
    }
    

    Oder von innen nach außen:

    while(!ende)
    {
      vector<string> zeile;
      for(i=0;i<Spaltenzahl;++i) zeile.push_back(spalte[i]);//Zeile füllen
      result.push_back(zeile);                              //und anhängen
    }
    

    (du kannst natürlich auch am Anfang genug Platz reservieren und dann in einer verschachtelten for()-Schleife durch deine Struktur iterieren:

    result.resize(zeilenzahl);
    for(i=0;i<zeilenzahl;++i)
    {
      result[i].resize(spaltenzahl);
      for(j=0;j<Spaltenzahl;++j) result[i][j]=spalte[j];
    }
    


  • @CStoll

    Deine erste Version hatte ich schon probiert:

    int SQLQuery(string query, vector<vector<string> > *result)
    {
        // ...
    
        // Für jede Zeile des Ergebnisses
        while ((row = mysql_fetch_row(res)))
        {
    
            result->push_back(vector<string>());
            int pos = result->size()-1;
    
            for(int i=0; i<num_fields; i++)
            {
                result[pos].push_back(string(row[i])); // Fehlermeldung
            }
        }
    
        // ...
    }
    

    Jedoch kommt in der markierten Zeile folgende Fehlermeldung, die ich nicht verstehe:

    VC++ 6 schrieb:

    ...\dbconnection\code.cpp(94) : error C2664: 'push_back' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<cha
    r> >' to 'const class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &'
    Reason: cannot convert from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class s
    td::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >'
    No constructor could take the source type, or constructor overload resolution was ambiguous



  • Wenn du einen Pointer verwendest, benötigst du eine zusätzliche Dereferenzierung:

    (*result)[pos].push_back(string(row[i]));
    


  • Supi, daran hat's gelegen.
    Vielen Dank für die schnellen Antworten - ich liebe dieses Forum.



  • Bevor ich einen neuen Thread eröffne pushe ich diesen mal.

    Wenn ich nun meinen mehrdimensionalen Vector habe, warum funktioniert das hier nicht?

    // error C2143: syntax error : missing ';' before '<'
    typedef vector<vector<string> > QueryVector;
    
    /***  Und das hier auch nicht ***/
    
    // in der Folgezeile kennt der Compiler den Datentyp 'string' nicht mehr
    #define QueryVector vector<vector<string> >
    


  • Sorry, hat sich bereits erledigt. War wieder zu vorschnell ... es ist halt Montag Morgen.


Anmelden zum Antworten