list.push_back似乎复制了最后添加的元素
list.push_back seems to duplicate the last added element
>输入: 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
,即如果它无法再读取任何内容,它将停止循环。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- 读取文件的最后一行并输入到链接列表时出错
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- lower_bound()返回最后一个元素
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- list.push_back似乎复制了最后添加的元素
- C++ N 个最后添加的项目容器
- 如何在 c++ 中将元素添加到数组的最后一个
- 将隐式促销添加到复杂类,最后一步
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- 最后在C++的链表中添加节点
- 链表只打印添加新节点后的最后一个元素
- unique()似乎正在添加最后一个元素的另一个副本
- 将空格字符添加到附加的每个项目,以必须擦除最后一个项目.如何改进
- 如何删除C++中添加到链表中的最后一个元素
- 从QMap获取最后插入/添加的项目
- 查找最后添加的文件(boost)
- 代码没有添加最后的默认值