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