vector<int>::iterator c = remove(x.begin(), x.end()-1, 5);
"usuwa" elementy z zakresu. "c" wskazuje na początek "usuniętych" elementów. W tym przypadku dałeś zakres bez ostatniego elementu, czyli tylko {1}, czyli nic nie zostało usunięte, czyli "c" == x.end() - 1.
x.erase(c, x.end());
Usunąłeś elementy od "c" do końca kontenera. W tym przypadku od x.end()-1. Zauważ, że w tym zakresie znalazło się 5.