C++ 翻译以下C++;编码到Nim中

C++ 翻译以下C++;编码到Nim中,c++,sorting,for-loop,nim-lang,C++,Sorting,For Loop,Nim Lang,我试图通过转换不同的代码片段来学习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); #包括 ... 对于(int t=q&1?u+x:u+x>>1;t>1;)t/=p[++cnt]=sieve[t]; ... 排序(p+1,p+cnt+1); 我了解什么是

我试图通过转换不同的代码片段来学习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);
#包括
...
对于(int t=q&1?u+x:u+x>>1;t>1;)t/=p[++cnt]=sieve[t];
...
排序(p+1,p+cnt+1);
我了解什么是三元运算符以及它是如何工作的,但我不太了解变量“t”和“cnt”(两个整数)以及数组“p”(一个整数数组)的情况。使用增量作为“p”的索引如何工作


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

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

for(int t = (q & 1? u + x: u + x >> 1); t > 1;)
{
    t /= p[++cnt] = sieve[t];
}
变量“t”和“cnt”(都是整数)以及数组“p”(一个整数数组)发生了什么

因此,
t
被设置为
u+x
u+x>>1
,具体取决于
q&1
是什么。然后在循环内部,我们将t除以
t
索引处
sieve
的值。我们还将该值分配给位于
++cnt
位置的
p
数组
++cnt
使用将
cnt
的值增加1,然后将该值用于
p
的索引

还有sort函数,我完全放弃了它,因为我找不到关于它的任何文档


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

您是想像您所说的那样学习Nim,还是想学习C?你问的两件事都很基本c:

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

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