将以下 C++ 代码翻译成 Nim
Translating the following C++ code into Nim
我试图通过转换不同的代码片段来学习 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" 的索引如何工作?
然后是排序函数,我完全放弃了,因为我找不到任何关于它做什么的文档(事实上,它把一个整数添加到数组中显然没有帮助)。
让我们首先让代码更具可读性。一点点空白不会伤害任何人。
for(int t = (q & 1? u + x: u + x >> 1); t > 1;)
{
t /= p[++cnt] = sieve[t];
}
what's going on with the variables "t" and "cnt" (both integers) and the array "p" (an array of integers)
所以 t
被设置为 u + x
或 u + x >> 1
取决于 q & 1
是什么。然后在循环内,我们将 t 除以 t
索引处 sieve
的值。我们还将该值分配给 ++cnt
位置的 p
数组。 ++cnt
使用 pre increment operator 将 cnt
的值增加 1,然后将该值用于 p
.
的索引
Then there's the sort function, in which I completely gave up because I couldn't find any documentation on what it does
为此,我假设他们正在使用 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 个元素之间的一个。
你是按照你说的努力学习Nim,还是努力学习C?你问的两件事都很基本 c:
++cnt 具有副作用 (cnt=cnt+1) 与 cnt 最终的值相结合。该值用作索引。副作用就是副作用。
p+1和p+cnt都是指针。在 C 中的大多数用途中,数组的名称被视为指向该数组第一个元素的常量指针。一个指针加上一个整数是另一个指针,指向原始元素之后的元素数。
我试图通过转换不同的代码片段来学习 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" 的索引如何工作?
然后是排序函数,我完全放弃了,因为我找不到任何关于它做什么的文档(事实上,它把一个整数添加到数组中显然没有帮助)。
让我们首先让代码更具可读性。一点点空白不会伤害任何人。
for(int t = (q & 1? u + x: u + x >> 1); t > 1;)
{
t /= p[++cnt] = sieve[t];
}
what's going on with the variables "t" and "cnt" (both integers) and the array "p" (an array of integers)
所以 t
被设置为 u + x
或 u + x >> 1
取决于 q & 1
是什么。然后在循环内,我们将 t 除以 t
索引处 sieve
的值。我们还将该值分配给 ++cnt
位置的 p
数组。 ++cnt
使用 pre increment operator 将 cnt
的值增加 1,然后将该值用于 p
.
Then there's the sort function, in which I completely gave up because I couldn't find any documentation on what it does
为此,我假设他们正在使用 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 个元素之间的一个。
你是按照你说的努力学习Nim,还是努力学习C?你问的两件事都很基本 c:
++cnt 具有副作用 (cnt=cnt+1) 与 cnt 最终的值相结合。该值用作索引。副作用就是副作用。
p+1和p+cnt都是指针。在 C 中的大多数用途中,数组的名称被视为指向该数组第一个元素的常量指针。一个指针加上一个整数是另一个指针,指向原始元素之后的元素数。