Schleife läuft einmal zu oft durch
-
Bei dieser
do { c++; in>>ch; buffer.push_back(ch); }while ( !in.eof() );aber auch hier
while ( !in.eof() ) { c++; in>>ch; buffer.push_back(ch); }hat c am Ende denn Wert 5 obwohl die Datei nur 4 Zeilen hat. Also die Liste hat fünf Einträge und keine vier. Warum ?
-
Das eof-Flag wird erst gesetzt, wenn versucht wird über das Dateiende hinaus zu lesen. Deine Datei ist vollständig gelesen und noch ein Durchlauf der das eof-flag dann setzt. in.good() nehmen.