for schleife
-
Hallo zusammen,
ich habe ein merkwürdiges Verhalten bei meiner for-Schleife.
info: scheiben ist ein vektor<int>
cout << "scheiben.size: " << scheiben.size()<< endl; for (unsigned int i = scheiben.size()-1; i > 0; i--) { cout << "i: " << i << endl; }
Die Ausgabe ist:
scheiben.size: 4
i: 3
i: 2
i: 1soweit so gut... wenn ich aber die Abbruchsbedingung auf i >= 0 setze, werden irgendwelche Grossen Zahlen ausgegeben:
for (unsigned int i = scheiben.size()-1; i >= 0; i--) { cout << "i: " << i << endl; }
Bin über jeden Hinweis dankbar.
VG
-
Was ist denn 0-1 bei einem unsigned?
-
ohhhhh, vielen Dank!
Kannst Du mir ein Vorschlag geben wie ich den Vektor vom größtem bis zum kleinsten Index durchlaufen kann.Eine Möglichkeit wäre:
if(i == 0) break;
Finde ich aber nicht so schön.
-
for (size_t i = scheiben.size(); i-- > 0;) { cout << "i: " << i << '\n'; }
typedef vector<int>::reverse_iterator iter; for (iter it=scheiben.rbegin(), end=scheiben.rend(); it!=end; ++it) cout << *it << '\n';
-
- Iteratoren und rbegin/rend
- signed int benutzen
- Aussen bis i>0 und innen mit j=i-1 arbeiten
-
ich danke euch für die Hilfe! Sehr nett
-
size_t i = scheiben.size() - 1; while(i < scheiben.size()) { cout << "i: " << i-- << '\n'; }
-
for ( int i = first; i != last; ++i ) { do_something(i); }
-->äquivalent (ohne continue/goto) zu
for ( int i = first; i != last; ) { do_something(i); ++i; }
--> Umkehrung der Reihenfolge (auch der Schleifenkörper wird gedanklich rückwärts durchlaufen).
for ( int i = last; i != first; ) { --i; do_something(i); }
-->Integration in die Schleifenbedingung (setzt nat. voraus, dass beim Dekrementieren kein Überlauf entsteht, wenn i wie hier vorzeichenbehaftet ist).
for ( int i = last; i-- != first; ) { do_something(i); }
Aus
for (unsigned int i = 0; i != scheiben.size(); ++i) { cout << "i: " << i << endl; }
wird also
for (unsigned int i = scheiben.size(); i-- != 0; ) { cout << "i: " << i << endl; }