in(std::cin):它是什么意思
in(std::cin) : What does it mean?
在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::ostream
的operator<<
。这样,整个表达式就变成了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问题,人们试图做类似的事情,等等....
- C++ - "Incomplete type not allowed"错误是什么意思,我该如何修复它?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?
- 尾随空格是什么意思,它和空白有什么区别?
- C ++技巧与*和它是什么意思
- 字符串数组[] = " " 是什么;意思是,为什么它有效?
- int main() 的返回值是什么意思,如何显示它?
- 我在运行时遇到以下错误.它是什么意思?我该如何调试它
- VOID NTAPI是什么意思?在哪里可以找到它的参考资料
- constchar***是什么意思?它是如何从C语言转换为Java语言的
- C++模板实例化,它到底是什么意思
- 函数声明中带有[]运算符的指针——它是什么意思
- 这个typedef是什么意思,它有什么好处
- 警告C4309 -它是什么意思,在这种情况下可以忽略它
- auto在c++ 11中的含义改变;请删除它这是什么意思
- in(std::cin):它是什么意思
- 这个基数是什么意思?它是标准的c++关键字吗?
- 错误是什么意思"void-value is not ignored"以及如何删除它?
- Boost编译标志,它是什么意思
- new (nothrow)操作符实际上是什么意思,为什么要使用它