我试图通过转换不同的代码来学习Nim,而且我偶然发现了一些我以前从未见过的东西。
layout-small
我理解三元运算符是什么以及它是如何工作的,我不太了解的是变量" t"和" cnt" (两个整数)和数组" p" (整数数组)。如何使用增量作为" p"的索引?工作?
然后是排序功能,我完全放弃了,因为我找不到任何关于它的功能的文档(事实上它明确地将一个整数添加到数组中)没帮助。
答案 0 :(得分:2)
让我们首先让代码更具可读性。一点点的空白从来没有伤害任何人。
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除以sieve
索引处的t
的值。我们还将该值分配给p
位置的++cnt
数组。 ++cnt
正在使用pre increment operator将cnt
的值增加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中的大多数用途中,数组的名称被视为指向该数组的第一个元素的常量指针。指针加上一个整数是另一个指针,指向超过原始数据的元素数。