while(i < v.size()-1){
v[i] = v[i+1];
}
Поскольку нигде здесь i
не увеличивается, вывод неизбежен: если в начале i
меньше v.size()-1
, оно останется таковым навсегда, пока наше солнце не сгорит, в бесконечности l oop: i
здесь никогда не меняется, поэтому остается навсегда меньше v.size()-1
. И именно поэтому вы не получаете вывод.
Кажется, это не единственная ошибка. Показанный алгоритм, по-видимому, имеет недостатки, по меньшей мере, еще одним способом и не будет надежно удалять дубликаты, по меньшей мере, в одном краевом случае. Но это был бы другой вопрос.
Библиотека C ++ имеет несколько функций алгоритма, которые позволяют делать все это в одной строке; но я предполагаю, что это классное задание, чтобы сделать это вручную. Вы должны переосмыслить свой подход на основе итераторов, что сделает эту реализацию намного проще и надежнее.