scanf 语句后的逗号



不是我的代码,而是从这里开始。在 read_data() 函数中有一个扫描,后面有一些我以前从未见过的东西。它有什么作用?是STL吗?

scanf("%d %dn", &a, &b), G[a].pb(b), deg[b]++;

这是逗号运算符的用法。逗号运算符(使用得相当罕见)将一堆表达式作为单个表达式组合在一起。在这种情况下,语句

scanf("%d %dn", &a, &b), G[a].pb(b), deg[b]++;

意思是"做scanf,然后在G[a]上调用pb(b),然后调用deg[b]++,评估结果deg[b]++

我看到它用于以下上下文:

for(i = 1; i <= M; i++)
    scanf("%d %dn", &a, &b), G[a].pb(b), deg[b]++;

老实说,这让我觉得风格很差。最好这样写:

for(i = 1; i <= M; i++) {
    scanf("%d %dn", &a, &b); 
    G[a].pb(b);
    deg[b]++;
}

上面的代码在功能上是等效的,并且更具可读性 - 您不必发布到Stack Overflow或了解C++语言的奇怪细节来弄清楚它的含义。

它只是使用逗号运算符将多个表达式组成一个语句。它有助于避免for循环周围的大括号(在我看来这不是一个好主意,因为它会混淆代码)。

它在功能上等效于:

   for(i = 1; i <= M; i++) {
        scanf("%d %dn", &a, &b);
        G[a].push_back(b); /* after macro expansion */
        deg[b]++;
   }

相关内容

  • 没有找到相关文章

最新更新