Подтвердить что ты не робот

Std:: stringstream vs std::string для конкатенации многих строк

Я знаю, что одним из преимуществ std::stringstream является то, что он является std::istream, поэтому он может принимать ввод от любого типа, который определяет от operator<< до std::istream, а также от типов примитивов.

Я не буду использовать operator<<; вместо этого я просто собираюсь объединить многие строки. Выполняет ли реализация std::stringstream быстрее, чем std::string для объединения многих строк?

4b9b3361

Ответ 1

Нет никаких оснований ожидать, что функции добавления std::string будут медленнее, чем stringstream вставки stringstream. Обычно std::string будет не более чем возможным распределением/копированием памяти плюс копирование данных в память. stringstream имеет дело с такими вещами, как локали и т.д., даже для базовых вызовов write.

Кроме того, std::string предоставляет способы минимизировать или устранить что-либо, кроме первого выделения памяти. Если вы reserve достаточно места, каждая вставка будет немного больше чем memcpy. Это не совсем возможно с stringstream.

Даже если это было быстрее, чем функции добавления std::string, вам все равно придется скопировать строку из stringstream чтобы что-то с ней сделать. Так что еще одно выделение + копия, которая вам не понадобится с помощью std::string. Хотя, по крайней мере, С++ 20 выглядит готовым для устранения этой конкретной потребности.

Вы должны использовать std::stringstream если вам нужно форматирование, а не только для склеивания некоторых строк.