Feel the difference: the 1st loop is correct, the 2nd one is wrong.
A stream eof state detected only after some input operation. Suppose the file contains a single line:
1. eof() returns false.
2. getline gets a line (no eof state detected now)
3. push a line, OK
3. eof() return false!
4. getline DOES NOT get a line, set eof flag
5. push... what?.. a previous line contents!
6. eof() returns true, break the loop...
We have TWO lines in the vector ;(
So it was the question about eof() incorrect usage, not getline...
Apropos, ifstream => ios::in, of course ;)
Yet another tip: stop senseless code tag usage. That's right: dear all...bla bla bla...urgent...my compiler does not work...