in(std :: cin):それはどういう意味ですか?

Boostの最初の例では、 in(std :: cin)が使用されています。私は in() istream を取得し、ある種のイテレータを作成すると思います。しかし、私は詳細にそれを説明するC + +のドキュメントを見つけることができませんでした。あなたは私を見つけるのを助けてくれますか?

ここでは、BoostのWebページからの例のコピーと貼り付けがあります:

#include 
#include 
#include 
#include 

int main()
{
   using namespace boost::lambda;
   typedef std::istream_iterator in;
   std::for_each(
   in(std::cin), in(), std::cout << (_1 * 3) << " " );
}
3

3 答え

in is just a typedef for std::istream_iterator so the example is just calling std::for_each on a "range" defined by the two temporary iterators: std::istream_iterator(std::cin) and std::istream_iterator().

値で初期化された istream_iterator はストリームの単なる "end"イテレータです。

How std::cout << (_1 * 3) << " " works is more subtle. Because _1 comes from the boost::lambda namespace, it ensures that the operators * and then << from the boost::lambda namespace are used, rather than an operator<< that acts directly on a std::ostream. This way the whole expression becomes a lambda rather than (any part of it) being executed as a conventional expression at the call site of for_each.

9
追加された
私はラムダの概念をある段落で凝縮する方法を試したが好きです。私はかなり飛行機があることを確信しています - whoosh - OPの頭の上にありますが、試してみると誇りに思っていますし、プロセスで not-failing しています。
追加された 著者 sehe,
+1良い説明。
追加された 著者 Morten Kristensen,

あなたはここでそれを定義しました:

typedef std::istream_iterator in;

したがって in(std :: cin)は、 std :: for_each で使用される stdin (cin)から読み込んだ整数の反復子であり、それらを3倍して出力します。

4
追加された

コードのtypedefに注目してください:

typedef std::istream_iterator in;

Thus, in(...) is the same as std::istream_iterator(...): it's calling the constructor for that type. There is a 1-argument constructor which accepts a std::istream, creating an iterator that represents the current point in that stream; and a 0-argument constructor creating an iterator that represents the end of any given stream. So std::for_each will iterate over every value provided by std::cin from now until it runs out.

std::istream_iterator takes a stream and provides an iterator over the ints in the stream, using operator>> to read them out of the stream.

しかし、私はそれを詳細に説明するC ++のマニュアルを見つけることができませんでした。

I don't know how you could possibly fail. I put std::istream_iterator into Google and the first result was http://www.sgi.com/tech/stl/istream_iterator.html which is pretty thorough, assuming you're already familiar with iterators. The next result is http://www.cplusplus.com/reference/std/iterator/istream_iterator/ which makes another attempt to explain things and is also fully detailed. Next comes http://stdcxx.apache.org/doc/stdlibref/istream-iterator.html , similarly, which finally explicitly mentions operator>> instead of just talking about formatted I/O operations (which is what operator>> does). Next comes a page with some C++ example snippets, then a couple of StackOverflow questions where people were trying to do something similar, etc....

1
追加された
ご意見ありがとうございます。私は "in()"のドキュメントを見つけることができませんでした。
追加された 著者 iampat,