011
21.06.2009, 20:51 Uhr
Yadgar
|
High!
Zitat von 0xdeadbeef: |
In dem Moment, in dem j == buffer.size() - 1 ist, wird buffer.at(j + 1) natürlich out_of_range schmeißen. Indices laufen von 0 bis size() - 1, du greifst ein Element dahinter auf dem Vektor zu.
|
Typischer Anfängerfehler... eins ist allerdings merkwürdig: obwohl jede Zeile nur drei Zahlenwerte (und am Ende ein \n) enthält:
0,20,0, 1,45,15, 0.15,0, usw.
gibt
C++: |
for (short a=0; a<numbers.size(); a++) cout << numbers.at(a) << endl;
|
folgendes aus:
4 0 20 0
4 1 45 15
4 0 15 0
usw.
Dass die 4 am Anfang wohl für die Zahl der Teilstrings abzüglich ihrer selbst steht ist klar - auf die letzte Zeile folgt kein Komma mehr, da wird folglich nur "3" ausgegeben. Anscheinend ist die erste Zahl aber kein Bestandteil des Vektors, denn wenn ich die Schleife mit a=1 beginnen lasse, wird sie ebenfalls ausgegeben, die tatsächlich pro Zeile erste Zahl im ursprünglichen ASCII-File hingegen nicht mehr, also
4 20 0
4 45 0
4 15 0
usw.
Wie kommt dieses Verhalten zustande? Anders gefragt: was ist istringstream in(line)?
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |