1Danke
ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
418
418
EMPFEHLEN
-
Hallo Leutz,
ich hab viel mit Matrizen zu tun.
Um auf die einzelnen Elementen zuzugreifen habe ich stinknormale for-Schleifen benutzt. Wie z.B.Code cpp:1 2 3 4 5 6 7
vector<double> value; vector<vector<double>> matrix; for(int i = 0; i < 10; ++i) value.push_back(i); for(int i = 0; i < 5; ++i) matrix.push_back(value);
Letztens habe ich wat über Iteratoren gelesen und wollte einfach ma los programmieren.Code cpp:1 2 3 4 5
for(int row = 0; row < matrix.size(); ++row){ for(int column = 0; column < matrix.at(row).size(); ++column) cout << matrix.at(row).at(column) << '\t'; cout << endl; }
Resultat:
Naja, das funktioniert natürlich nicht! Ehrlich gesacht, kam ich schon ab der zweiten for-Schleife ins schwitzen.Code cpp:1 2 3 4 5 6 7
vector<vector<double>>::iterator it_row; vector<double>::iterator it_column; for(it_row = matrix.begin(); it_row < matrix.end(); ++it_row) for(it_column = matrix.at(it_row).begin(); it_column matrix.at(it_row).end(); ++it_column) cout << *it_column << '\t'; cout << endl;
Könnt ihr mir da Tipps geben und würdet ihr mir empfehlen weiter mir Iteratoren zu arbeiten? Wenn ja, warum? Bzw wo liegt da der Vorteil.
tausend Dank im voraus
-
08.01.10 07:58 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Mit Iteratoren zu arbeiten ist sicherlich sinnvoll. Es reduziert Fehlerquellen beim Arbeiten mit Indizes (< oder <= Länge?) und ist manchmal auch noch effizienter. Außerdem kann man den zugrundeliegenden Container austauschen ohne den Code ändern zu müssen.
Dazu sollte man aber nicht per Hand die Iterator-Typen angeben, sondern typedef's benutzen:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// Typ Alias vereinbaren typedef std::vector<std::vector<double> > matrix_type; matrix_type matrix; // ... // wenn die Elemente nicht verändert werden, besser const_iterator verwenden, // sonst iterator for (matrix_type::const_iterator row = matrix.begin(), row_end = matrix.end(); row != row_end; ++row) { for (matrix_type::value_type::const_iterator col = row->begin(), col_end = row->end(); col != col_end; ++col) { cout << *col << '\t'; } cout << endl; }
Richtig nützlich sind die Iteratoren aber wenn man sie mit den Standardalgorithmen kombiniert:
GrußCode cpp:1 2 3 4 5 6 7
for (matrix_type::const_iterator row = matrix.begin(), row_end = matrix.end(); row != row_end; ++row) { std::copy (row->begin(), row->end(), ostream_iterator<double>(cout, "\t")); cout << endl; }
Geändert von deepthroat (08.01.10 um 08:09 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hey deepthroat,
wo du hier das Beispiel mit den Iteratoren gemacht hast.
Kannst du kurz erklären was der unterscheid zwischen const_iterator und iterator ist?
Leider steht genau das in meinem C++-Buch nicht drinnen.
GrüßeWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
09.01.10 15:13 #4
Moin,
schau mal hier (ziemlich am Ende) .....
http://www.math.uni-bayreuth.de/~rba...ml/node77.html
Quelle: kurze Google-Suche nach "const_iterator iterator" (3. Ergebnis)

Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
Ähnliche Themen
-
XPresso Iterator
Von axn im Forum Cinema 4DAntworten: 2Letzter Beitrag: 26.03.10, 21:58 -
Iterator liefert Mist
Von little-smile im Forum C/C++Antworten: 3Letzter Beitrag: 28.05.09, 18:40 -
Iterator nicht korrekt
Von little-smile im Forum C/C++Antworten: 7Letzter Beitrag: 25.05.09, 10:11 -
iterator problem
Von sim26 im Forum JavaAntworten: 4Letzter Beitrag: 01.09.06, 15:51 -
Iterator - Fehler
Von Der Held im Forum JavaAntworten: 9Letzter Beitrag: 20.10.05, 22:33





Zitieren
Login






