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]; }
-
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.