list.push_back似乎复制了最后添加的元素

list.push_back seems to duplicate the last added element

本文关键字:最后 添加 元素 复制 push back list      更新时间:2023-10-16

>输入: This_is_a_[北居]_text

预期产量:This_is_a_[北杖]_text

实际产量:This_is_a_[北杖]_textt

似乎当代码结束时,它会添加一个额外的不需要的字符(注意末尾的额外"t"(。 法典:

#include <iostream>
#include <list>
using namespace std;
int main() {
list <char> text;
char current_char;
while(true){
// Revisa si llegamos al final del archivo
if(cin.peek() != char_traits<char>::eof()){
cin >> current_char;
text.push_back(current_char);
}
else{
break;
}
}
for (auto itr = text.begin(); itr != text.end(); itr++){
cout << *(itr);
}
return 0;
}

发生这种情况是因为换行符。

您的输入实际上是This_is_a_[Beiju]_textn.当cin偷看n时,它还没有看到EOF。当operator>>尝试读取下一个字符时,它会失败,因为它忽略了作为空格的换行符,然后命中 EOF。因此,current_char的值与上一次读取的值保持不变。这意味着您将在列表中插入最后一个字符的副本。

您可以改用它:

while(cin >> current_char){
text.push_back(current_char);
}

cin到达 EOF 时计算为false,即如果它无法再读取任何内容,它将停止循环。