Я пытаюсь выучить 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];
}
что происходит с переменными «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 с начала массива.
Вы пытаетесь выучить Нима, как вы сказали, или пытаетесь выучить С? Обе вещи, о которых вы спрашивали, довольно простые:
++cnt имеет побочный эффект (cnt = cnt + 1) в сочетании со значением, которым заканчивается cnt. Это значение используется в качестве индекса. Побочный эффект является побочным эффектом.
p + 1 и p + cnt являются указателями. Имя массива рассматривается как постоянный указатель на первый элемент этого массива в большинстве случаев использования в C. Указатель плюс целое число — это другой указатель, указывающий это количество элементов после оригинала.