Mehrdimensionale vectoren ausgeben
-
Guten Abend,
hab mich gerade mit Vectoren beschäftigt und bin auf das Problem gestoßen dass ich den 2 dimensionalen Vector nicht ausgeben kann. Der Kompiler schmeist mir dann den Fehler Returned 1 exit status. Ich weis auch nicht wirklich was der Fehler bedeuten soll.#include <iostream> #include <vector> int mein() { std::vector <std::vector <char>> playfield { {'1','2','3'},{'4','5','6'},{'7','8','9'} }; playfield[3][3]; for (int r = 0; playfield.size(); r++) { for (int c = 0; c<playfield[r].size(); c++) { std::cout <<" " << playfield[r][c] << " "; } std::cout<<std::endl; } system ("pause"); return 0; }
-
@käsekuchen Welche Warnungen gibt denn der Compiler?
Wenn nicht, schalte mal den Warn-Level auf Maximum.
Die Abbruchbedingung der r-Schleife ist ohne Effekt.
-
@käsekuchen sagte in Mehrdimensionale vectoren ausgeben:
Guten Abend,
hab mich gerade mit Vectoren beschäftigt und bin auf das Problem gestoßen dass ich den 2 dimensionalen Vector nicht ausgeben kann.Eine generelle Anmerkung: es gibt keinen 2d-vector in C++!
Die Struktur, die du hast, ist ein vector von vectoren. Das mag erstmal nach Pedanterie klingen, aber es gibt einen wesentlichen Unterschied: du könntest unterschiedliche Längen pro Zeile haben, d.h. du hast drei (voneinander unabhängige) vectoren, die "zufällig" alle die Länge 3 haben, in einem anderen vector.
Wichtig ist auch, dass so nicht alle Daten (die 9 chars) hintereinander im Speicher liegen, sondern du da auch eine vector-von-vector-Struktur hast (d.h. jeder deiner 4 vectoren speichert je einmal die Länge 3 und einen Pointer auf die Daten).Das ist eine wesentlich andere Struktur als z.B. ein
std::array<std:array<char, 3>, 3>
oder ein entsprechendes C-Array.Ein anderer Tipp: wenn du über alle Elemente eines vectors iterieren willst, nimm eine range-for-loop.
Also statt
for (size_t r = 0; r < playfield.size(); r++) {...}
(vergleiche dies mit dem, was du geschrieben hast! 2 Änderungen, eine davon ist dein Fehler!)
schreibst dufor (const auto &row : playfield) { for (const auto &c : row) { std::cout << ' ' << c << ' '; } std::cout << '\n'; }
-
Dein Compiler gibt dir sicher einen Grund für den Fehler an. Vermutlich weiß er nicht, was er mit der Funktion "mein" anfangen soll
-
@Mittagspause ja ist mir am Nächsten Tag dann auch sofort aufgefallen. und oh ein Wunder allses hat funktioniert.
Aber warum dann kein Syntaxeror?
-
@käsekuchen sagte in Mehrdimensionale vectoren ausgeben:
Aber warum dann kein Syntaxeror?
Es ist ja keiner! Es hindert dich niemand daran, eine Funktion
mein
oder auchkaesekuchen
zu nennen. Die Funktionmein
ist eine wie jede andere "normale" Funktion auch.Es ist
main
, was speziell ist. Aber es hätte ja auch sein können, dass dies eine Bibliothek oder so wird und gar keinmain
hat.Das finale Programm muss natürlich irgendwo ein
main
haben. (ist dann eher Aufgabe des Linkers, sich über ein fehlendesmain
zu beschweren)
-
@wob Ah sowas dachte ich mir schon. Da mir durchaus bewust ist das ich meine Funktionen nennen kann wie ich will.
Aber gut zu wissen dass für sowas der Linker zuständig.