Это происходит из-за символа новой строки.
Фактически введено This_is_a_[Beiju]_text\n
. Когда cin
заглядывает в \n
, он еще не видит EOF. Когда operator>>
затем пытается прочитать следующий символ, он терпит неудачу, потому что он игнорирует разрыв строки как пробел и затем попадает в EOF. Таким образом, значение current_char
остается таким же, как и при предыдущем чтении. Это означает, что вы вставите дубликат последнего символа в свой список.
Вместо этого вы можете использовать это:
while(cin >> current_char){
text.push_back(current_char);
}
cin
оценивается как false
при достижении EOF, т.е. он остановит l oop, если он больше ничего не может читать.