Когда я ищу в Интернете разницу между этими двумя библиотеками, все говорят, что <iostream>
это стандартная библиотека ввода / вывода C ++ и <cstdio>
для C. Мой профессор говорит, что cin>>
а также cout<<
не хорошие функции, и если мы используем cin>>
Много раз наше приложение будет обязательно сбой. Он также говорит, что stdio
обеспечивает почти в 3 раза более быстрый ввод и вывод, чем iostream
, Тем не менее, я предпочитаю использовать iostream
потому что это удобнее, а также я не знаю, прав ли мой профессор.
Так что вы посоветуете мне использовать?
С помощью iostream
не должен вызывать сбой вашей программы. Это может быть медленно, но это только потому, что он пытается взаимодействовать с stdio
, Эта синхронизация может быть отключена1. iostream
это идиоматический способ C ++ для получения ввода, и я бы порекомендовал его использовать stdio
функционирует в большинстве случаев при использовании C ++.
1 с помощью std::ios::sync_with_stdio(false);
Используйте потоки в C ++ и stdio.h в C.
Да, потоки немного медленнее, но считаются ли эти миллисекунды? Пользовательский ввод редко является узким местом приложения.
И если потоки используются правильно, и ваши библиотеки компилятора / среды выполнения в порядке, ваше приложение не будет авария.
Но, если у вас есть веские, объяснимые причины для использования cstdio
функций, то вполне допустимо использовать их и в C ++.
Если производительность В / В ДЕЙСТВИТЕЛЬНО не имеет значения, используйте то, что делает вашу программу наиболее понятной (удобной для чтения).
В огромном количестве написанных мною программ лишь немногие нуждались в особой обработке, чтобы «оценить, насколько быстрым является ввод-вывод» — и большая часть проблемы связана с std::stream
функции должны выполнять фактический синтаксический анализ ввода [а также синхронизацию со stdio] — что, если вы читаете, скажем, числа с плавающей запятой, будет довольно сложно написать собственную версию [, которая принимает полный диапазон форматы, которые std::stream
позволяет].
Если производительность ввода / вывода действительно имеет значение, то с помощью std::stream::read
а также std::stream::write
может быть решением, но в большинстве случаев лучшая производительность достигается за счет использования непереносимых mmap
а также MapViewOfFile
интерфейсы, которые «отображают» содержимое файла непосредственно из файловой системы в виртуальную память приложения. Это позволяет сэкономить на копировании, которое обрабатывает данные, и сделает его немного быстрее.
Библиотека iostreams, вероятно, медленнее, чем библиотека stdio более низкого уровня. Streams делает гораздо больше под прикрытием — преобразование типов, локализация, обработка исключений и т. Д.