Когда следует использовать строку вместо stringstream?
Когда следует использовать stringstream
вместо string::append()
?
Предположим, что я собираюсь привязать только строки.
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
Или:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
Какая из них быстрее?
Ответы
Ответ 1
Я не знаю, какой из них будет быстрее, но если бы мне пришлось угадать, я бы сказал, что ваш второй пример, тем более, что вы вызвали функцию члена reserve
, чтобы выделить большое пространство для расширения.
Если вы только конкатенируете строки, используйте string::append
(или string::operator+=
).
Если вы собираетесь преобразовывать числа в их строковое представление, а также форматировать их во время преобразования, а затем добавлять результаты преобразования вместе, используйте строковые потоки. Я упоминаю часть форматирования явно, потому что, если вам не требуется форматирование, С++ 11 предлагает std::to_string
, который может использоваться для преобразования числовых типов в строки.
Ответ 2
string.append выполняется намного быстрее. Особенно, когда вы резервируете.
Если вы конкатенируете только строки, я бы использовал string.append. Я бы использовал только stringstream, когда мне нужно было автоматически конвертировать не строки в строки, например:
const int x(42);
stringstream ss;
ss << "My favorite number is: " << x << std::endl;
Здесь stringstream автоматически преобразует x в строку и добавляет ее. Мне не нужно звонить атои. Stringstream автоматически преобразует все базовые типы. Это здорово для этой цели.
Также, если вы собираетесь только направлять данные в stringstream для последующего преобразования в строку. Вы можете использовать ostringstream, который предназначен для вывода.
Я надеюсь, что это поможет.