[英]Using istream_iterator to read strings
我不明白如何通过迭代器读取字符串与直接读取字符串不同。 举例来说,请考虑以下代码:
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
string str{istream_iterator<char>(cin),{}};
cout << str << endl;
string str1;
cin >> str1;
cout << str1 << endl;
}
很明显,它使用istream_iterator
读取str
,并通过传统方法读取str1
。 我有两个问题:
CTRL+D
(Unix),它也终止程序,因此第二部分不会被执行。 有没有办法解决? cin >>
直接阅读的行为不同? 如果您已到达流的末尾,则无法再阅读任何内容。
范围构造函数中提供的结束迭代器表示输入的结束。 当满足无效字符或流的末尾(找到EOF
)时,启动迭代器将等于结束迭代器,这就是它停止的方式。 流迭代器会丢弃空格,因此如果您打印字符串,它应该不包含空格。
格式化第二个提取使用空格来分隔输入,这就是为什么只读取一个单词的原因。
我不明白如何通过迭代器读取字符串与直接读取字符串不同。
您的示例的不同之处在于第一个读取整个流,而第二个读取单个单词(直到第一个空格)。
更一般地,迭代器可用于填充其他容器(例如,使用istream_iterator<int>
填充vector<int>
),或直接传递给使用前向迭代器的算法。
通过字符串迭代器结束读取的唯一方法是发送一个
CTRL+D
(Unix),它也终止程序
它不会终止程序,只是关闭输入流。 但是这样做后你将无法从输入中读取任何其他内容; 就目前而言,你的程序没有意义,因为它试图超越cin
的结尾。
使用迭代器读取时,如果我输入空格(空格,\\ t,\\ n),迭代器继续读取并不重要。 为什么这种行为与通过
cin >>
直接阅读的行为不同?
因为这是>>
如何定义使用字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.