in(std::cin):它是什么意思

in(std::cin) : What does it mean?

本文关键字:它是什么 意思 cin std in      更新时间:2023-10-16

在Boost的第一个示例中,使用in(std::cin)。我想in()会得到istream然后创建某种迭代器。然而,我找不到任何c++文档来详细解释它。你能帮我找一个吗?

下面是从Boost网页中复制粘贴的示例:

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
   using namespace boost::lambda;
   typedef std::istream_iterator<int> in;
   std::for_each(
   in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

in只是std::istream_iterator<int>typedef,所以这个例子只是在两个临时迭代器:std::istream_iterator<int>(std::cin)std::istream_iterator<int>()定义的"范围"上调用std::for_each

值初始化的istream_iterator只是流的通用end迭代器。

std::cout << (_1 * 3) << " "的工作原理更微妙。由于_1来自boost::lambda命名空间,因此它确保使用boost::lambda命名空间中的*<<操作符,而不是直接作用于std::ostreamoperator<<。这样,整个表达式就变成了lambda,而不是(其中的任何一部分)在for_each的调用位置作为传统表达式执行。

您在这里定义:

typedef std::istream_iterator<int> in;

因此,in(std::cin)是一个整数迭代器,std::for_each使用它从stdin (cin)中读取并将其乘以3并打印出来。

注意代码中的类型定义:

typedef std::istream_iterator<int> in;

因此,in(...)std::istream_iterator<int>(...)相同:它调用该类型的构造函数。有一个只有一个参数的构造函数,它接受一个std::istream,创建一个迭代器,表示流中的当前点;以及一个0参数构造函数,该构造函数创建一个迭代器,表示任何给定流的结束。因此,std::for_each将从现在开始迭代std::cin提供的每个值,直到它耗尽。

std::istream_iterator<int>接受一个流,并提供一个遍历流中int的迭代器,使用operator>>从流中读取它们。

然而,我找不到任何c++文档来详细解释它。

我不知道你怎么会失败。我在Google中输入std::istream_iterator<int>,第一个结果是http://www.sgi.com/tech/stl/istream_iterator.html,假设你已经熟悉迭代器了,这个结果非常全面。下一个结果是http://www.cplusplus.com/reference/std/iterator/istream_iterator/,它再次尝试解释事情,也很详细。接下来是http://stdcxx.apache.org/doc/stdlibref/istream-iterator.html,类似地,它最后明确地提到了operator>>,而不是仅仅谈论格式化的I/O操作(这是operator>>所做的)。接下来的页面是一些c++示例片段,然后是几个StackOverflow问题,人们试图做类似的事情,等等....