Я знаю, что стандарт определяет, что это для векторов, но как насчет строк?
Да, амортизируется постоянное время. См. Таблицу 101 на стр. 716. этого документа:
В таблице 101 перечислены операции, которые предоставляются для некоторых типов контейнеров последовательностей, но не для других.
реализация должна обеспечить эти операции для всех типов контейнеров, показанных в столбце «контейнер», и должна реализовывать их так, чтобы принимать амортизированное постоянное время.
Operation | Description | Container
---------------+----------------------+----------------------------------
a.push_back(t) | Appends a copy of t. | basic_string, deque, list, vector
Других решений пока нет …