TGViewer
Библиотека C/C++ разработчика | cpp, boost, qt Библиотека C/C++ разработчика | cpp, boost, qt @cppproglib · 16.8K subscribers
Post #4240 4.62K
🫡 💩 Для обработки строк потоки в C++ могут быть медленными

Потоки могут быть на удивление медленными. Например, если вы хотите анализировать числа, то эта процедура C++ близка к наихудшему возможному выбору с точки зрения производительности:

std::stringstream in(mystring);
while(in >> x) {
sum += x;
}
return sum;


Проведем эксперимент — возьмем строки, содержащие символ «%», и создадим новые, в которых символ % заменен на %25, но остальная часть строки остается неизменной.

Простая конструкция строки выглядит следующим образом:

std::string string_escape(const std::string_view file_path) {
std::string escaped_file_path;
for (size_t i = 0; i < file_path.length(); ++i) {
escaped_file_path += file_path[i];
if (file_path[i] == '%')
escaped_file_path += «25»;
}
return escaped_file_path;
}


Оптимизированная версия с использованием потоков выглядит следующим образом:

std::string stream_escape(const std::string_view file_path) {
std::ostringstream escaped_file_path;
for (size_t i = 0; i < file_path.length(); ++i) {
escaped_file_path << file_path[i];
if (file_path[i] == '%')
escaped_file_path << «25»;
}
return escaped_file_path.str();
}


Продолжить изучение

#гайд
Daniel Lemire's blog For processing strings, streams in C++ can be slow The C++ library has long been organized around stream classes, at least when it comes to reading and parsing strings. But streams can be surprisingly slow. For example, if you want to parse numbers, then this C++ routine is close to being the worst possible…
  • 🤩 17
  • 👍 5
  • 🔥 1
More from @cppproglib
  1. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  2. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  3. Sep 13, 2026🤩 Inline static в классах — забудь про .cpp Сколько раз ты забывал добавить определение s…
  4. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
  5. Aug 31, 2026❓Кто этот призрак в вашем коде: изучаем особенности работы с легаси на C++ Легаси — вот чт…
  6. Aug 8, 2026⚙️ Почему классический ООП тормозит игровые движки — и что с этим делать Обработка тысяч о…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →