【发布时间】:2020-12-26 13:49:27
【问题描述】:
我看不懂下面的代码。
(来自https://www.boost.org/doc/libs/1_74_0/more/getting_started/unix-variants.html)
#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) << " " );
}
网页没有为代码解释任何内容。
我无法理解的是std::for_each函数的行。
std::for_each 定义如下。
template <class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn);
所以first 是in(std::cin),last 只是in(),function 是cout 语句。
谁能给我解释一下示例代码中first和last的语法和含义?
first迭代器好像是用初始值std::cin构造的,但是最后一个值in()有什么用呢?
我也看不懂_1 部分。
程序输出3 *我输入的任意数量的整数值。
【问题讨论】:
-
阅读
istream_iterator构造函数。还有一个类似的例子:en.cppreference.com/w/cpp/iterator/istream_iterator/… -
in() 构造流尾迭代器
-
boost::lambda::_1 也是一个占位符,它创建一个需要一个参数的 lambda 函数。
-
啊,谢谢(我正在阅读 cppreferece 页面并发现了这一点)。 @bakaDev 您可以将其发布为答案以便我选择吗?
标签: c++ boost iterator istream-iterator