将下面的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"answers"cnt"(都是整数)和数组"p"(整数数组)发生了什么。如何使用增量作为"p"的索引工作?
然后是排序函数,我完全放弃了,因为我找不到任何文档说明它是做什么的(事实上,它将一个整数添加到数组中显然没有帮助)。
让我们首先让代码更易于阅读。一点空白不会伤害任何人。
for(int t = (q & 1? u + x: u + x >> 1); t > 1;)
{
t /= p[++cnt] = sieve[t];
}
变量"t"answers"cnt"(都是整数)和数组"p"(一个整数数组)发生了什么
因此t
被设置为u + x
或u + x >> 1
取决于q & 1
是什么。然后在循环中,我们将t除以sieve
在t
索引处的值。我们还将该值赋给++cnt
所在位置的p
数组。++cnt
使用预增运算符将cnt
的值增加1,然后将该值用于p
的索引。
然后是sort函数,我完全放弃了,因为我找不到任何关于它做什么的文档
为此,我假设他们正在使用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个到数组开始的小于1个
你是在像你说的那样学习Nim,还是在学习C?你问的两件事都是很基本的c:
++cnt的副作用(cnt=cnt+1)与cnt最终得到的值相结合。该值用作索引。副作用就是副作用。
p+1和p+cnt都是指针。在c语言中,大多数情况下,数组的名称被视为指向该数组第一个元素的常量指针。指针加上整数是另一个指针,指向原来的元素数。
- 不同翻译单元中不可重载的非内联函数定义
- 需要将一行代码从C++ Qt翻译成PyQt
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 在没有 API 的情况下使用谷歌翻译文本
- 如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 是否允许类在程序中的不同翻译单元之间具有不同的定义?
- 我怎样才能代替使用新的使用malloc翻译
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 如何将 'in' 关键字从 python 翻译成 c++?
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 如何用c语言翻译openssl命令pbkdf2
- 为什么编译器不在同一翻译单元中警告 ODR 违规
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 如何翻译这个给定代码中的 ::* 运算符和member_fn?
- 来自不同翻译单元的函数会干扰吗?
- 在 opengl 中翻译相机时遇到问题
- 如何平均继续翻译向量
- 如何在C++中的不同翻译单元之间共享枚举的实例
- 将下面的c++代码翻译成Nim