Использование scanf () в программах на C ++ быстрее, чем использование cin? - PullRequest
106 голосов
/ 25 июня 2009

Я не знаю, правда ли это, но когда я читал FAQ на одном из проблемных сайтов, я нашел кое-что, что привлекло мое внимание:

Проверьте ваши методы ввода / вывода. В C ++ использование cin и cout слишком медленное. Используйте их, и вы гарантированно не сможете решить ни одной проблемы с приличным количеством ввода или вывода. Вместо этого используйте printf и scanf.

Может кто-нибудь уточнить это? Действительно ли scanf () в программах на C ++ быстрее, чем cin >> что-то ? Если да, то стоит ли использовать его в программах на C ++? Я думал, что это специфично для C, хотя я только изучаю C ++ ...

Ответы [ 12 ]

0 голосов
/ 27 апреля 2010

Конечно, смешно использовать cstdio вместо iostream. По крайней мере, когда вы разрабатываете программное обеспечение (если вы уже используете c ++ вместо c, то идите до конца и используйте его преимущества, а не только страдания от его недостатков).

Но, по мнению интернет-эксперта, вы не разрабатываете программное обеспечение, вы создаете программу, которая должна уметь делать то, для чего программное обеспечение Microsoft занимает 60 секунд за 3 секунды !!!

Так что, в этом случае, золотое правило выглядит так (конечно, если вы не столкнетесь с еще большими проблемами при использовании Java)

  • Используйте c ++ и используйте всю его мощь (и тяжесть / медлительность) для решения проблемы
  • Если вы ограничены во времени, измените кеги и койки для printfs и scanfs (если вы облажались, используя строку класса, напечатайте так: printf (% s, mystr.c_str ());
  • Если вы все еще ограничены во времени, попробуйте внести некоторые очевидные оптимизации (например, избегать слишком большого количества встроенных для / while / dowhiles или рекурсивных функций). Также убедитесь, что проходите мимо слишком больших ссылочных объектов ...
  • Если вы все еще ограничены во времени, попробуйте изменить std :: vectors и наборы для c-массивов.
  • Если вы все еще ограничены во времени, переходите к следующей проблеме ...
0 голосов
/ 25 июня 2009

Даже если бы scanf были быстрее, чем cin, это не имело бы значения. В подавляющем большинстве случаев вы будете читать с жесткого диска или клавиатуры. Загрузка необработанных данных в ваше приложение занимает на порядки больше времени, чем scanf или cin для их обработки.

...