Если вы не хотите переходить на язык более низкого уровня, чтобы сделать это, возможно, было бы полезно изменить свое мышление, чтобы вы один раз просматривали исходную строку и записывали новую (если это могло быть заранее выделенным, тем лучше), потому что это избавило бы от необходимости перемещать все символы ~ 900000-N за точкой вставки N.
Существуют также специальные представления, в которые можно перейти, чтобы сделать такие операции очень быстрыми (например, веревки ), но вам не нужно что-то подобное для этого сценария.
РЕДАКТИРОВАТЬ: Многие старые структуры данных (и новые тоже в этом отношении), которые имеют хорошие большие значения, на практике медленны из-за гигантских постоянных факторов, которые были проигнорированы, и / или они не учитывают современную архитектуру ( например, кеши, вычисления против извлечения). Веревки кажутся слишком интенсивными по указателям, чтобы быть быстрыми на практике, и вы бы справились с чем-то вроде буфера с разрывом для общих изменений буфера.