Stdio Vs Iostream

Когда я ищу в Интернете разницу между этими двумя библиотеками, все говорят, что <iostream> это стандартная библиотека ввода / вывода C ++ и <cstdio> для C. Мой профессор говорит, что cin>> а также cout<< не хорошие функции, и если мы используем cin>> Много раз наше приложение будет обязательно сбой. Он также говорит, что stdio обеспечивает почти в 3 раза более быстрый ввод и вывод, чем iostream, Тем не менее, я предпочитаю использовать iostream потому что это удобнее, а также я не знаю, прав ли мой профессор.

Так что вы посоветуете мне использовать?

11

Решение

С помощью iostream не должен вызывать сбой вашей программы. Это может быть медленно, но это только потому, что он пытается взаимодействовать с stdio, Эта синхронизация может быть отключена1. iostream это идиоматический способ C ++ для получения ввода, и я бы порекомендовал его использовать stdio функционирует в большинстве случаев при использовании C ++.

1 с помощью std::ios::sync_with_stdio(false);

16

Другие решения

Используйте потоки в C ++ и stdio.h в C.
Да, потоки немного медленнее, но считаются ли эти миллисекунды? Пользовательский ввод редко является узким местом приложения.

И если потоки используются правильно, и ваши библиотеки компилятора / среды выполнения в порядке, ваше приложение не будет авария.

Но, если у вас есть веские, объяснимые причины для использования cstdio функций, то вполне допустимо использовать их и в C ++.

7

Если производительность В / В ДЕЙСТВИТЕЛЬНО не имеет значения, используйте то, что делает вашу программу наиболее понятной (удобной для чтения).

В огромном количестве написанных мною программ лишь немногие нуждались в особой обработке, чтобы «оценить, насколько быстрым является ввод-вывод» — и большая часть проблемы связана с std::stream функции должны выполнять фактический синтаксический анализ ввода [а также синхронизацию со stdio] — что, если вы читаете, скажем, числа с плавающей запятой, будет довольно сложно написать собственную версию [, которая принимает полный диапазон форматы, которые std::stream позволяет].

Если производительность ввода / вывода действительно имеет значение, то с помощью std::stream::read а также std::stream::write может быть решением, но в большинстве случаев лучшая производительность достигается за счет использования непереносимых mmap а также MapViewOfFile интерфейсы, которые «отображают» содержимое файла непосредственно из файловой системы в виртуальную память приложения. Это позволяет сэкономить на копировании, которое обрабатывает данные, и сделает его немного быстрее.

3

Библиотека iostreams, вероятно, медленнее, чем библиотека stdio более низкого уровня. Streams делает гораздо больше под прикрытием — преобразование типов, локализация, обработка исключений и т. Д.

1
По вопросам рекламы [email protected]