У меня есть работающая вращающаяся функция для моего массива int. Приведенный ниже код делает это, за исключением того, что im передает значения без необходимости. Я пытаюсь добиться поворота «на место». То, что я имею в виду, это то, где ptrs будут увеличиваться или уменьшаться, а не захватывать значения из массива. Что мне нужно, чтобы «повысить» уровень эффективности таким образом для этого метода. Все предложения?In Place rotation C++ Practice
void quack::rotate(int nRotations)
{
if (count <= 1) return;
else // make sure our ptrs are where we want them.
{
intFrontPtr = &items[0].myInt;
intBackPtr = &items[count-1].myInt;
}
for (int temp = 0; nRotations != 0;)
{
if (nRotations > 0)
{
temp = *intFrontPtr;
*intFrontPtr = *intBackPtr;
*intBackPtr = temp; // Connect temps for the rotation
--intBackPtr; // Move left [...<-] into the array
}
else if (nRotations < 0)
{
temp = *intBackPtr;
*intBackPtr = *intFrontPtr;
*intFrontPtr = temp; // Connect temps for the rotation
++intFrontPtr; // Move right [->...] into the array
}
if (intBackPtr == &items[0].myInt ||
intFrontPtr == &items[count-1].myInt)
{
intFrontPtr = &items[0].myInt;
intBackPtr = &items[count-1].myInt; // need to re-set
if (nRotations > 0) nRotations--; // Which ways did we rotate?
else nRotations++;
}
}
}
Ах да, я пробую на практике C++ и знаю их много функций, плавающие вокруг, которые запрограммированы, чтобы сделать это уже ... Im пытаясь «построить свой». Я думаю, что я получил это синтаксически, но эффективность всегда там, где я борюсь. Будучи новичком, я был бы очень благодарен за этот аспект.
Разве это не вращающийся массив влево? –
Да. Типично зафиксировано. – sdtom
большой трюк. Хотя вы всегда перемещаете элемент дважды, в то время как это можно сделать за один раз. – Toad