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 du

    for (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 auch kaesekuchen zu nennen. Die Funktion mein 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 kein main hat.

    Das finale Programm muss natürlich irgendwo ein main haben. (ist dann eher Aufgabe des Linkers, sich über ein fehlendes main 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.


Anmelden zum Antworten