Тут стал вопрос производительности операций чтения/записи. Напомню, что в С++ есть замечательная функция-флаг ios_base::sync_with_stdio() с помощью которой можно отключить синхронизацию стандартных потоков C и С++, и тем самым повысить производительность. Замечательный компилятор от не менее замечательной фирмы Microsoft этот флаг тупо игнорирует. Т.к. я не директор Microsoft и даже не ответственный за выпуск Visual Studio — мне глубоко всё равно кто в этом виноват. Для меня главное — результат.
Простой тест показал:
1255626 — G++ с выключенным sync_with_stdio — 50 мс
1255624 — G++ c включенным sync_with_stdio — 200 мс
1255627 — MS C++ с проигнорированным sync_with_stdio — 230 мс
Но, т.к. на этом сайте GNU C++ используется через одно место, т.е. через Microsoft Windows, используя непонятный порт под названием MinGW, то мне стало интересно какова реальная ситуация. Я взял две одинаковые виртуальные машины, запущенные на одной и той же физической — одну с 32-хбитной Windows, другую с 32-хбитным Linux. Сгенерировал файл с 10 млн. рандомных чисел (около 100МБ, генерировал, между прочим, кодом из этого поста). Взял простой код, считывающий эти 10 млн. чисел. И вот скриншоты того, что получилось:
Windows/MSVS с проигнорированным sync_with_stdio ~15 с
Windows/MinGW c включенным sync_with_stdio ~14 с
Windows/MinGW c выключенным sync_with_stdio ~3 с
Linux/GCC c включенным sync_with_stdio ~8 с
Linux/GCC c выключенным sync_with_stdio <3 с
Т.о. в некоторых случаях можно добиться несколько кратного увеличения производительности простой сменой ОС и компилятора. Можете попробовать сами ;)