Я не использовал его, поэтому не могу обещать, что он сделает все, что вам нужно.Но вы, возможно, захотите просто заменить тело этой функции на функцию std::rotate
.
Она должна быть уже хорошо оптимизирована и с гораздо меньшей вероятностью будет содержать ошибки в вашем приложении.
http://www.sgi.com/tech/stl/rotate.html
Если вам нужны предложения по оптимизации, я рекомендую избегать всех операций по модулю.Они могут потребовать разделения, что является одной из самых дорогих операций, которые вы можете выполнять на вашем процессоре.Это удобный способ подумать о том, как достичь своей цели, но он может быть очень дорогим для выполнения вашего ЦП.
Вы можете удалить свои операторы по модулю, если используете два цикла: один от середины до концаи другой от начала до середины.
Но если вы можете, посмотрите, сможете ли вы вообще избежать вращения.Если вы будете осторожны, вы сможете устранить бессмысленные операции обхода / копирования полного массива.См. Мой комментарий к ОП, чтобы узнать, как этого добиться.