Вам нужно переместить память тем или иным образом, поэтому предлагаемое вами решение будет настолько быстрым, насколько это возможно.
Вы также можете использовать стандартные функции std::string
:
str.insert(str.begin(), str[n - 1]);
str.erase(str.end() - 1);
или memmove
, или memcpy
(я на самом деле не рекомендую это, это для аргумента)
char temp = str[n - 1];
memmove(str.data() + 1, str.data(), n - 1);
str[0] = temp;
Обратите внимание, что memmove
может выглядеть быстрее, но по сути это то же самое, что и ваш цикл. Он перемещает байты один за другим, он просто заключен в другую функцию. Этот метод может быть быстрее для гораздо больших блоков данных размером 1000 байт или более, поскольку ЦП оптимизирован для перемещения больших кусков памяти. Но вы не сможете измерить разницу для 10 или 20 байтов.
Более того, компилятор, скорее всего, запустит дополнительные оптимизации, когда увидит ваш цикл for
, обнаружит, что вы перемещаете память, и выберет лучший вариант.
Компилятор также хорош в работе с std::string
методами. Это обычные операции, и компилятор знает, как лучше всего их обработать.