сортировка — перевод следующего кода C ++ в 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»?

Затем есть функция сортировки, от которой я полностью отказался, потому что я не смог найти никакой документации о том, что она делает (тот факт, что она добавляет целое число в массив, очевидно, не помогает).

1

Решение

Давайте начнем с того, что сделаем код немного более читабельным. Немного пробела никогда никому не повредит.

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 использует оператор предварительного приращения увеличить стоимость 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 с начала массива.

2

Другие решения

Вы пытаетесь выучить Нима, как вы сказали, или пытаетесь выучить С? Обе вещи, о которых вы спрашивали, довольно простые:

++cnt имеет побочный эффект (cnt = cnt + 1) в сочетании со значением, которым заканчивается cnt. Это значение используется в качестве индекса. Побочный эффект является побочным эффектом.

p + 1 и p + cnt являются указателями. Имя массива рассматривается как постоянный указатель на первый элемент этого массива в большинстве случаев использования в C. Указатель плюс целое число — это другой указатель, указывающий это количество элементов после оригинала.

0

По вопросам рекламы [email protected]