【发布时间】:2014-08-06 14:07:08
【问题描述】:
我不明白通过迭代器读取字符串与直接读取字符串有何不同。为了举例说明,请考虑以下代码:
#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),这也会终止程序,因此不会执行第二部分。有没有办法解决这个问题? - 使用迭代器读取时,输入空格(空格、\t、\n)无关紧要,迭代器会继续读取。为什么这种行为与直接通过
cin >>阅读时的行为不同?
【问题讨论】:
-
在 C++03 中试试这个
string str{istream_iterator<char>(cin),{}}; -
哎呀,我已经习惯花括号初始化了
-
@TemplateRex 不用担心 :) 我只是使用了 C++11 的特定功能,这就是标签的原因。当然问题不在于 C++11
标签: c++ string c++11 istream-iterator