将以下C ++代码翻译成Nim

时间:2015-07-14 16:14:33

标签: c++ sorting for-loop nim

我试图通过转换不同的代码来学习Nim,而且我偶然发现了一些我以前从未见过的东西。

layout-small

我理解三元运算符是什么以及它是如何工作的,我不太了解的是变量" t"和" cnt" (两个整数)和数组" p" (整数数组)。如何使用增量作为" p"的索引?工作?

然后是排序功能,我完全放弃了,因为我找不到任何关于它的功能的文档(事实上它明确地将一个整数添加到数组中)没帮助。

2 个答案:

答案 0 :(得分:2)

让我们首先让代码更具可读性。一点点的空白从来没有伤害任何人。

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

变量" t"和" cnt" (两个整数)和数组" p" (整数数组)

所以t被设置为u + xu + x >> 1,具体取决于q & 1。然后在循环内部,我们将t除以sieve索引处的t的值。我们还将该值分配给p位置的++cnt数组。 ++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);。因此,这将对数组中的所有元素进行排序,从数组的开头到数组中的一个元素,从数组的开头到cnt + 1元素。

答案 1 :(得分:0)

你是在试着像你说的那样学习Nim,还是想学习C?你问的两件事都是非常基本的c:

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

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