Как указано в комментариях , стандарт не устанавливает каких-либо требований к сложности для многих функций basic_string
(включая erase
).Отчасти это связано с тем, что исторически существовал целый ряд различных стратегий реализации (наиболее известным было то, что копирование при записи было популярно в эпоху C ++ 98), поэтому комитет не хотел указывать что-либо слишком точно.
базовое поведение типичных современных реализаций очень похоже на vector<char>
: вставка и удаление дешевы в конце (с перераспределенными перераспределениями) и дороги в начале.Маленькие строки обрабатываются без выделения памяти вообще (путем повторного использования пространства указателей для хранения символов).Это означает, что стирание может привести к копированию всей строки, если она станет очень короткой (но тогда копия будет дешевой).Это также означает, что итераторы и ссылки становятся недействительными легче, чем с vector
.
Нет никаких алгоритмов , которые лучше работают на string
,но существуют альтернативные структуры данных , которые имеют различные характеристики производительности. веревка является типичной среди них тем, что обеспечивает несколько более медленный доступ, но гораздо более быструю вставку и удаление.