2-dimensionales array und new-Operator Hilfe!!
-
Hallo,
bin noch dabei, C++ zu lernen und habe hier ein (für mich) großes Problem:Ich will ein 2-dimensionales array erzeugen, und will dabei dem User ermöglichen, dass er die Dimensionen des arrays beliebig wählen kann.
Ich dachte an folgenden Code:
int zeile,spalte; cout<<"Zeilen eingeben: "; cin>>zeile; cout<<"Spalten eingeben: "; cin>>spalte; int *A=new int[zeile][spalte]; //A soll meine Matrix sein for(int i=0;i<zeile;i++) { for(int j=0;j<spalte;j++) { A[i][j]=1; } } . . .Das nur als Beispiel, um die Matrix danach komplett mit Einsen zu füllen.
Leider mag der Compiler meinen Code ganz u garnicht u ich kann machen was ich will. Denke, es hängt mit der Speicherallokierung zusammen.
Hat jemand eine Idee, wie man das besser, bzw. richtig machen kann?
Danke vielmals,
Greetz Mati
-
Nutze std::vector aus vector
EDIT: wichtigen Fehler korrigiert (hatte vector.h geschrieben)
-
Bei mehreren Dimensionen kannst du nur die äußerste Dimension dynamisch festlegen - alle anderen müssen zur Compile-Zeit feststehen. Aber du könntest mit geeigneter Index-Umrechnung ein zweidimensinales Array auf einem eindimensionalen Feld umsetzen:
int* A = new int[zeile*spalte]; for(i=0;i<zeile;++i) for(j=0;j<spalte;++j) A[i+j*zeile]=1;
-
Wenns nich ganz so "basic" sein muss kannst du boost::multi_array verwenden.
Shinja schrieb:
Nutze std::vector aus vector.h
std::vectr aus vector.

grüße
-
Ok, andere Frage von mir dann: auch wenn man <vector> inkludiert steht die Klasse doch imemr noch in der vector.h oder nicht? Habe das h extra deswegen wieder angefügt.
-
Hat zwar nichts mit dem Thema zu tun, aber nein. Tut sie nicht (zwangsläufig).
grüße
-
Danke, dann korrigier ich das gleich mal.
Sorry fürs OT
-
#include <vector> #include <iostream> using namespace std; int main() { int zeile = 5, spalte; //Wenn die zweite Dimension zur Compilezeit bekannt ist, macht man das so int(*D2)[10] = new int [zeile][10]; // new liefert hier nicht int* sondern int(*)[10] ! // D2[3][5] = 1; usw. delete[] D2; cout<<"Zeilen eingeben: "; cin>>zeile; cout<<"Spalten eingeben: "; cin>>spalte; // Wenn die zweite Dimension nicht bekannt ist, so wie von CStoll gezeigt. // Es sollten jedoch Arrays entstehen, die genauso organisiert sind wie die, die der Compiler generieren würde // wenn er die zweite Dimension kennt, also A[i*spalte+j]=1; vector<vector<int> > A(zeile, vector<int>(spalte)); for(int i = 0; i < zeile; i++) for(int j=0;j<spalte;j++) A[i][j]=1; return 0; }:xmas1:
-
Dann aber gleich
vector<vector<int> > A(zeile, vector<int>(spalte,1));:xmas1: