Я разработал метод rotate для моего класса объектов стека. Я сделал следующее: если в стеке есть элементы: {0,2,3,4,5,6,7}, мне нужно было бы поворачивать элементы вперед и назад.
Где, если мне нужно повернуть вперед на 2 элемента, то в массиве будет {3,4,5,6,7,0,2}. И если мне нужно повернуть назад, или -3 элемента, то, глядя на исходный массив, это будет {5,6,7,0,2,3,4}
Так что метод, который я разработал, работает нормально. Это просто ужасно неэффективное ИМО. Мне было интересно, могу ли я обернуть массив с помощью оператора мод? Или, если это бесполезный код, который я пока не понял, и так далее.
Наверное, мой вопрос: как я могу упростить этот метод? например используя меньше кода. : -)
void stack::rotate(int r)
{
int i = 0;
while ( r > 0 ) // rotate postively.
{
front.n = items[top+1].n;
for ( int j = 0; j < bottom; j++ )
{
items[j] = items[j+1];
}
items[count-1].n = front.n;
r--;
}
while ( r < 0 ) // rotate negatively.
{
if ( i == top+1 )
{
front.n = items[top+1].n;
items[top+1].n = items[count-1].n; // switch last with first
}
back.n = items[++i].n; // second element is the new back
items[i].n = front.n;
if ( i == bottom )
{
items[count-1].n = front.n; // last is first
i = 0;
r++;
continue;
}
else
{
front.n = items[++i].n;
items[i].n = back.n;
if ( i == bottom )
{
i = 0;
r++;
continue;
}
}
}
}