【问题标题】:Translating the following C++ code into Nim将以下 C++ 代码翻译成 Nim
【发布时间】:2015-07-14 16:14:33
【问题描述】:

我正在尝试通过转换不同的代码片段来学习 Nim,但我偶然发现了一些我以前从未见过的东西。

#include<bits/stdc++.h>
...
for(int t=q&1?u+x:u+x>>1;t>1;)t/=p[++cnt]=sieve[t];
...
sort(p+1,p+cnt+1);

我了解三元运算符是什么以及它是如何工作的,但我不太明白变量“t”和“cnt”(都是整数)和数组“​​p”(一个整数)。使用增量作为“p”的索引如何工作?

然后是排序函数,我完全放弃了它,因为我找不到任何关于它的作用的文档(事实上它将整数添加到数组中显然没有帮助)。

【问题讨论】:

    标签: c++ sorting for-loop nim-lang


    【解决方案1】:

    让我们首先让代码更具可读性。一点点空白永远不会伤害任何人。

    for(int t = (q & 1? u + x: u + x >> 1); t > 1;)
    {
        t /= p[++cnt] = sieve[t];
    }
    

    变量“t”和“cnt”(都是整数)和数组“​​p”(整数数组)发生了什么

    所以t 被设置为u + xu + x &gt;&gt; 1,这取决于q &amp; 1 是什么。然后在循环内部,我们将 t 除以 sieve 在索引处的 t 的值。我们还将该值分配给位于++cnt 位置的p 数组。 ++cnt 正在使用pre increment operatorcnt 的值增加1,然后将该值用于p 的索引。

    然后是排序功能,我完全放弃了,因为我找不到任何关于它的作用的文档

    为此,我假设他们正在使用std::sort() 函数。在处理数组时,数组的名称被视为指向数组第一个元素的指针。因此,当我们看到sort(p+1,p+cnt+1); 时,您可以将其翻译为sort(one from the begining of the array, cnt + 1 elements from the begining of the array);。因此,这将对数组中的所有元素进行排序,从数组开头的 1 到数组开头的小于 cnt + 1 的元素。

    【讨论】:

      【解决方案2】:

      你是按照你说的学Nim,还是学C?你问的两件事都很基本 c:

      ++cnt 具有副作用 (cnt=cnt+1) 与 cnt 最终的值相结合。该值用作索引。副作用就是副作用。

      p+1 和 p+cnt 都是指针。在 C 中的大多数使用中,数组的名称被视为指向该数组第一个元素的常量指针。一个指针加上一个整数是另一个指针,指向原来的元素数量。

      【讨论】:

        猜你喜欢
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2016-08-04
        • 2014-01-06
        相关资源
        最近更新 更多