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 нижнего уровня. Потоки делают намного больше под обложками - преобразования типов, локализацию, обработку исключений и т.д.