vector mit zugriff auf struct komponenten
-
So kannst du im strukt nicht initialisieren, du verwendest vector falsch, Google hilft
-
#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'; }
-
SeppJ schrieb:
Was macht das "Matrix" am Anfang von Zeile 7?
Deine Bezeichner sind übrigens schrecklich: struct Matrix stellt keine MAtrix dar. vector<vector<unsigned>> ist so manches, aber keine Matrix. Bezeichner mit Unterstrich am Anfang sind reserviert.
zeile 7 ist Strukturname
wenn man auf komponenten in struct zugreifen will muss man doch ein deklarierenBeispiele: struct person { /* deklariert den Strukturtyp person */ int alter; float gewicht; char name[25]; } adam, eva; /* deklariert Variable des Typs person */ struct person paul; /* deklariert weitere Variable des Typs person */ person paula; /* Deklaration nur in C++ zulaessig bzw. in C nach vorherigem typedef */ paul.alter = 13; /* Zuweisung von Werten an die */ paul.gewicht = 47.8; /* einzelnen Komponenten */strukturtyp ist Matrix(Zeile7)
variable des typs Matrix ist _2Dmatrix
_2Dmatrix ist wie paul bzw paula und dann will ich dadurch zugriff auf komponenten im struct haben.
-
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.