C++ 3-dimensionale Matrix erzeugen mit vector

elamatrix

Grünschnabel
Hallo,

ich versuche eine dreidimensionale Matrix zu erzeugen die im weiteren Verlauf mit Werten gefüllt werden soll.
Ich habe ursprünglich mit arrays gearbeitet musste da aber feststellen, dass bei den von mir gewünschen Elementzahlen (x=75, y=110, z=75) das Programm abstürzt.

Nun wurde mir empfohlen ich solle statt arrays die Klasse vector verwenden.
Ich habe es schließlich gescgafft eine 2-dimensionale Matrix zu erzeugen mit folgendem Code:

Code:
main(){

vector<vector<int> > matrix;
int dim1=2, dim2=5, dim3=3;        
matrix = vector<vector<int> > (dim2);
  for(int i = 0; i < dim1; i++){
        matrix[i] = vector<int>(dim1);  
            for(int j = 0; j < dim2; j++){
                matrix[i][j]= 0;        
                cout << matrix[i][j]<<" ";}
                cout << '\n';}        

getchar();
}

Nun wollte ich das ganze einfach erweitern mit einer dritten Komponente aber nun stürzt das Programm beim starten ab und liefert keine Matrix aber auch keine Fehlermeldung.

Code:
main(){

vector<vector<vector<int> > > matrix;
int dim1=2, dim2=10, dim3=3;        
matrix = vector<vector<vector<int> > >(dim3);

  for (int k=0; k < dim3; k++){
    cout << "matrix" << " " << k << '\n';
 
    for(int i = 0; i < dim1; i++){
        //matrix[k][i] = vector<int>(dim1);    
            for(int j = 0; j < dim2; j++){
                matrix[i][j][k]= 0;   
                cout << matrix[i][j][k]<<" ";}
                cout << '\n';}        
                cout << '\n';}
getchar();
}

Wo steckt mein Fehler? Langsam bin ich etwas verzweifelt ;)

Ich muss noch dazu sagen. Ich arbeite erst 2 Wochen mit C++ es kann also gut sein dass ich hier einfach nur dumme Anfängerfehler drin habe. Bitte seht es mir nach.

Liebe Grüße,
ela
 
Willkommen!

elamatrix hat gesagt.:
ich versuche eine dreidimensionale Matrix zu erzeugen die im weiteren Verlauf mit Werten gefüllt werden soll.
Ich habe ursprünglich mit arrays gearbeitet musste da aber feststellen, dass bei den von mir gewünschen Elementzahlen (x=75, y=110, z=75) das Programm abstürzt.
Das hat natürlich nur indirekt etwas mit deiner gewünschten Dimension zu tun, du hast irgend einen Fehler im Programm gehabt.

Du kannst gleich bei der Initialisierung angeben welche Größe die einzelnen Vektoren haben sollen:
C++:
vector<vector<vector<int> > > matrix(dim1, vector<vector<int> >(dim2, vector<int>(dim3, 55)));
(in dem Beispiel bekommen alle Werte der Matrix den Wert 55 - wenn du den Parameter weglässt bekommen sie den Standardwert eines int also 0)

Gruß
 
Das nenn ich mal eine nette Begrüßung. Da schreib ich gern weiter wenn man Willkommen gehießen wird. :)

Und schonmal vielen Dank. Nun funktioniert es - und zwr uch deutlich schneller als mit meiner ursprüngliche Lösung.
Und für Leute (wie ich bisher) die erstmal mit google alle Foren durchstöbern ob die eigene Frage nicht bereits beantwortet wurde setz ich nochmal den funktionierenden Code rein.

Code:
main(){
int dim1=75, dim2=110, dim3=78;
vector<vector<vector<int> > > matrix(dim1, vector<vector<int> >(dim2, vector<int>(dim3)));   
 
  for (int k=0; k < dim3; k++){
    cout << "matrix" << " " << k << '\n';
 
    for(int i = 0; i < dim1; i++){
            for(int j = 0; j < dim2; j++){
                matrix[i][j][k]= 0;                   //Matrix mit Initialwerten füllen
                cout << matrix[i][j][k]<<" ";}
                cout << '\n';}        
                cout << '\n';}
getchar();
}

Also vielen Dank!
ela

Edit: es empfielt sich nicht dieses Programm so in der Konsole laufen zu lasen da die Ausgabe eine Weile dauern kann.
 
Zuletzt bearbeitet:
elamatrix hat gesagt.:
Code:
main(){
...
                matrix[i][j][k]= 0;                   //Matrix mit Initialwerten füllen
Du solltest die Funktion main immer mit dem Rückgabetyp int deklarieren. (du scheinst einen etwas älteren Compiler zu verwenden der das noch OK findet).

Die Initialisierung kannst du dir wie gesagt sparen, das ist schon erledigt.

Gruß
 
elamatrix hat gesagt.:
also in dieser Form?

Code:
int main()
Ja.

elamatrix hat gesagt.:
warum ist das nötig?
Das ist nötig weil es so im C++ Standard steht. Es gibt laut Standard 2 Varianten die Funktion main zu deklarieren:
C++:
int main();

int main(int argc, char* argv[]);
Es ist erlaubt das Compilerhersteller noch zusätzliche Varianten mit anderen Argumenten anbieten allerdings muß die Funktion immer einen int als Rückgabetyp haben. Der C++ Compiler gibt nämlich automatisch 0 zurück wenn die main Methode verlassen wird um anzuzeigen das die Ausführung des Programms erfolgreich war. Man sollte einen Wert ungleich 0 zurückgeben wenn ein Fehler aufgetreten ist.

Dein Compiler akzeptiert wohl das Fehlen des Rückgabetyps was in C++ nicht erlaubt ist.

Gruß
 
Zurück