使用迭代器读取输入

Using iterator to read input

我有下面的代码,它有sin_start(cin)的功能。我不确定 C++ 中是否定义了任何此类函数,或者我是否需要自己定义它。但是这段代码也能以某种方式编译和运行。

#include <iostream>
#include <iterator>
using namespace std;

int main()
{
    cout << "Enter integers: ";
    istream_iterator<int> sin_start(cin);
}

代码可以编译,因为它是有效代码。它只是没有做任何有意义的事情。

sin_start不是函数,它是istream_iterator<int>类型的变量,其中istream_iterator是在<iterator>头文件中定义的模板class文件。它将 std::cin 作为参数传递给其构造函数,因此它知道要从哪个流读取数据。

但代码只是在构造该变量后退出。它没有尝试读取任何数据。为此,尝试更像这样的东西:

#include <iostream>
#include <iterator>
using namespace std;

int main() {
    cout << "Enter integers: ";
    istream_iterator<int> sin_start(cin), end;
    while (sin_start != end) {
        int value = *sin_start++;
        // do something with value...
    }
}

这将读取整数,直到用户取消终端上的输入。

但是,在评论中,您提到您想要读取整数,直到用户改为按下 Enter。在这种情况下,您需要一种不同的方法,因为 istream_iterator 在内部使用 operator>>,它会在每次读取时跳过前导空格,并且 Enter 被视为空格。尝试更像这样的东西:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    cout << "Enter integers: ";
    string line;
    getline(cin, line);
    istringstream iss(line);
    int value;
    while (iss >> value) {
        // do something with value...
    }
}