Я пытаюсь написать функцию, которая получит подстроку строки, но изменяет ее на месте, а не создает дубликаты.
Способ C -i sh:
memmove((void*)&str[0], (const void*)&str[start], sizeof(char)*count);
str.resize(count);
Так близко к C ++ 11, насколько я знаю, как кодировать:
auto write_it=str.begin();
for(auto read_it=str.begin()+start;read_it!=str.begin()+start+count;read_it++)
{
*write_it=*read_it;
write_it++;
}
str.resize(count);
Что из этого теоретически быстрее? У меня было предчувствие memmove()
, но это все равно создает буфер под капотом, так что в конечном итоге это может навредить нам.
Являются ли какие-либо из них переносимыми? Я не уверен, что моя модификация строки гарантированно не сделает недействительными мои итераторы. Редактировать: Согласно Делает ли перемещение символов в строку недействительными итераторы? мой подход итератора безопасен. Но действительно ли это эффективно? Единственная причина, по которой меня волнует, - это то, что я пишу код, который будет вызываться другими пользователями, поэтому он должен быть по крайней мере достаточно быстрым.
Я невероятно удивлен, что нигде не смотрел об этом.