vector mit zugriff auf struct komponenten
-
Ich habe das vermutlich nicht gefragt, weil ich tatsächlich eine Erklärung brauchte...
-
SeppJ schrieb:
Ich habe das vermutlich nicht gefragt, weil ich tatsächlich eine Erklärung brauchte...
hab dich falsch verstanden.
ich wollte nur damit sagen dass ich danach arbeite und leider hat das nicht gestimmt.
-
Belli schrieb:
#include <vector> #include <iostream> using namespace std; struct Matrix { int zahl; bool istWeg; }; int main() { vector< vector<Matrix> > _2Dmatrix; //Platz für 3 mal 3 Einträge beschaffen _2Dmatrix.resize(3); for(int i = 0; i < _2Dmatrix.size(); ++i) _2Dmatrix[i].resize(3); //ab hier jetzt von _2Dmatrix[0][0] bis _2Dmatrix[2][2] bearbeiten bool b = true; for(int i = 0; i < 3; ++i) for(int j = 0; j < 3; ++j) { Matrix m = {i * j, b = !b}; _2Dmatrix[i][j] = m; } cout << _2Dmatrix[1][2].zahl << ' ' << _2Dmatrix[1][2].istWeg << '\n'; cout << _2Dmatrix[1][2].zahl << ' ' << _2Dmatrix[2][0].istWeg << '\n'; }wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
wieso kann ich hier kein Wert zuweisen ?
//Platz für n mal n Einträge beschaffen _2Dmatrix.resize(reihen); for (int i = 0; i < _2Dmatrix.size(); ++i) _2Dmatrix[i].resize(SPALTEN); //ab hier jetzt von _2Dmatrix[0][0] bis _2Dmatrix[2][2] bearbeiten for (unsigned int i = 0; i < reihen; i++) { for (unsigned int x = 0; x < SPALTEN; x++) { _2Dmatrix[i][x] = x; // hier kann ich nicht zuweisen wegen struct komponenten //mit array wäre arr[i][x] = i; somit kann ich ausgeben 0 1 2 3...9 } cout << endl; }
-
yeurandom92 schrieb:
wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
Was macht das int deiner Meinung nach?
-
manni66 schrieb:
yeurandom92 schrieb:
wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
Was macht das int deiner Meinung nach?
ein vector mit elementen typ integer
zitiert ausm skript
vector<double> v ; // Noch l e e r e r Vektor f u e r double−Werte
vector<int> w( 10 ) ; // Vektor mi t Pl a t z f u e r 10 i n t−Werte
-
Nein.
-
yeurandom92 schrieb:
manni66 schrieb:
yeurandom92 schrieb:
wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
Was macht das int deiner Meinung nach?
ein vector mit elementen typ integer
zitiert ausm skript
vector<double> v ; // Noch l e e r e r Vektor f u e r double−Werte
vector<int> w( 10 ) ; // Vektor mi t Pl a t z f u e r 10 i n t−WerteUnd was willst du dort reinstecken?
-
yeurandom92 schrieb:
wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
Weil Du in Deinem Eingangsposting so getan hast, als ob Du den Typ Matrix in Deinen Vektor stecken willst:
yeurandom92 schrieb:
//wenn man mit array machen will dann klappt das
//Matrix arr[x][y];Da kommt schließlich auch kein int vor. Da hast Du ein Array vom Typ Matrix, und in meinem Beispiel hast Du einen Vektor mit Vektoren vom Typ Matrix.
yeurandom92 schrieb:
wieso kann ich hier kein Wert zuweisen ?
for (unsigned int x = 0; x < SPALTEN; x++) { _2Dmatrix[i][x] = x;Weil x vom Typ unsigned int ist, der Vektor aber Elemente vom Typ Matrix beheimatet.
Das würde mit DeinemMatrix arr[x][y];auch nicht funktionieren.
Du könntest aber natürlichfor (unsigned int x = 0; x < SPALTEN; x++) { _2Dmatrix[i][x].zahl = x;
-
Belli schrieb:
yeurandom92 schrieb:
wieso muss ich vector<vector<Matrix>> xyz schreiben anstatt vector<vector<int>> xyz;
Weil Du in Deinem Eingangsposting so getan hast, als ob Du den Typ Matrix in Deinen Vektor stecken willst:
yeurandom92 schrieb:
//wenn man mit array machen will dann klappt das
//Matrix arr[x][y];Da kommt schließlich auch kein int vor. Da hast Du ein Array vom Typ Matrix, und in meinem Beispiel hast Du einen Vektor mit Vektoren vom Typ Matrix.
yeurandom92 schrieb:
wieso kann ich hier kein Wert zuweisen ?
for (unsigned int x = 0; x < SPALTEN; x++) { _2Dmatrix[i][x] = x;Weil x vom Typ unsigned int ist, der Vektor aber Elemente vom Typ Matrix beheimatet.
Das würde mit DeinemMatrix arr[x][y];auch nicht funktionieren.
Du könntest aber natürlichfor (unsigned int x = 0; x < SPALTEN; x++) { _2Dmatrix[i][x].zahl = x;danke dir für die ausführliche Erklärung
ich habe daraus eine Lösung gebastelt
ich benutze vector<vector<Matrix>>matrix und ich kann auf komponenten zugreifen.würde es trotzdem reichen wenn ich schreibe
struct Matrix{ int wert; bool istWeg; }; vector<vector<int>> matrix; //matrix.istWeg //oder vector<vector<Matrix>>matrix; //matrix.istwegIch habe noch nicht verstanden bzw ich weiß noch nicht was man in <...> eingeben soll um auf komponenten zuzugreifen. <Matrix> oder <int> und warum?
-
Ein Quell deiner der Verwirrung könnte hier die Namensgebung (auch wichtig!) sein.
Unter einer Matrix versteht man im allgemeinen ein zweidimensionales Gebilde mit einer definierten Anzahl Zeilen und Spalten. Das ist bei dir modelliert als
vector<vector< ... >>.Das, was du "Matrix" nennst (die Klasse), modelliert hingegen keine Matrix, sondern das Element in der Matrix. Die Klasse sollte daher besser
MatrixElementstattMatrixheißen.
-
wob schrieb:
Ein Quell deiner der Verwirrung könnte hier die Namensgebung (auch wichtig!) sein.
Unter einer Matrix versteht man im allgemeinen ein zweidimensionales Gebilde mit einer definierten Anzahl Zeilen und Spalten. Das ist bei dir modelliert als
vector<vector< ... >>.Das, was du "Matrix" nennst (die Klasse), modelliert hingegen keine Matrix, sondern das Element in der Matrix. Die Klasse sollte daher besser
MatrixElementstattMatrixheißen.Bedeutet: wenn ich vector xyz benutze, ganz egal ob 2d vector<vector<>>xyz oder 1d vektor.
wenn ich zugriff auf komponenten in struct mit Vektor realisieren will, muss ich in
<...> "structname" eingeben. In diesem Fall Matrixelement ?wenn ich int, float oder was anderes eingebe, dann ist es nur ein vektor mit dementspechend int , float usw. elementen.
Danke fuer die Hilfe an euch.
Wieder was dazu gelernt.
-
yeurandom92 schrieb:
würde es trotzdem reichen wenn ich schreibe
struct Matrix{ int wert; bool istWeg; }; vector<vector<int>> matrix; //matrix.istWeg //oder vector<vector<Matrix>>matrix; //matrix.istwegIch habe noch nicht verstanden bzw ich weiß noch nicht was man in <...> eingeben soll um auf komponenten zuzugreifen. <Matrix> oder <int> und warum?
Im ersten Fall
vector<vector<int>> matrix;ist matrix doch nur der Name des Vektors, ähnlich wie in
int matrix[10][10];die Elemente des Vektors sind aber int - Werte, auf die Du mit
matrix[2][2]zugreifen kannst.
Du willst aberMatrix array[10][10];in einem Vektor haben, und da ist die Entsprechung
vector< vector<Matrix> > vektor;mal davon abgesehen, dass Du dem Vektor jetzt erst mal Elemente hinzufügen musst.
-
Und dann kannst du per
typedef vector<vector<MatrixElement>> Matrix;einen Aliasnamen deklarieren, so daß du dann
Matrix matrix;schreiben kannst.