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

Когда следует использовать строку вместо 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);

Какая из них быстрее?

4b9b3361

Ответ 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, который предназначен для вывода.

Я надеюсь, что это поможет.