私のコードではなく、hereからです。 read_data()関数には、私が前に見たことのない何かがあるscanfがあります。それは何をするためのものか?それはSTLですか?scanf文の後のカンマ?
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
私のコードではなく、hereからです。 read_data()関数には、私が前に見たことのない何かがあるscanfがあります。それは何をするためのものか?それはSTLですか?scanf文の後のカンマ?
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
これはカンマ演算子の使用です。カンマ演算子は、まれにしか使用されておらず、一連の式をまとめて単一の式としてまとめています。 。
:この場合は、声明scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
は「deg[b]++
の結果を評価し、deg[b]++
を呼び出し、G[a]
にpb(b)
を呼び出す
私はそれは、この文脈で使われていることがわかり、その後、scanf
を行う意味します
for(i = 1; i <= M; i++)
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
正直なところ、これは貧しいスタイルとして私を打つことは、この書き込みをする方がよいでしょう:。
をfor(i = 1; i <= M; i++) {
scanf("%d %d\n", &a, &b);
G[a].pb(b);
deg[b]++;
}
上記のコードは、機能的には同等であり、読みやすくなっています。つまり、C++言語の詳細を知るためにスタックオーバーフローや奇妙な詳細を知る必要はありません。 :-)
それは(それがコードを難読化として、私の意見で良いアイデアではありません)for
ループ周りにカッコを回避するのに役立つcomma operator. を使用することにより、単一の文の中に作られただけで複数の式です。
それが機能的に同等です:
for(i = 1; i <= M; i++) {
scanf("%d %d\n", &a, &b);
G[a].push_back(b); /* after macro expansion */
deg[b]++;
}
混乱の源は何ですか? [コンマ演算子](https://en.wikipedia.org/wiki/Comma_operator)? –