Quali sono i vantaggi di usare ‘#include ‘ al posto di ” in C++?

Troverete iostream più efficiente perché non avete bisogno di specificare gli specificatori di formato come %s,%d,%f e così via per prendere l'input o per emettere una variabile.
Si fa semplicemente
cin>>a;
cout<

Ma in cstdio si dovrebbe scrivere
Se a è una stringa,
scanf("%s", a);
printf("%s",a);
e questo richiede un po' di tempo extra.

Ci sono alcune potenziali insidie nelle prestazioni con cin/cout :

Per default,
cin/cout perdono tempo a sincronizzarsi con i buffer stdio della libreria C, così che potete liberamente mischiare chiamate a
scanf/printf con operazioni su cin/cout
. Disattiva questo con
std::ios_base::sync_with_stdio
(
false
);
.
Molti tutorial C++ ti dicono di scrivere
cout
<<
endl
invece di
cout << 'n' Ma endl è effettivamente più lento perché forza un flush, che solitamente non è necessario. (Avreste bisogno del flush se state scrivendo, per esempio, una barra di progresso interattiva, ma non quando scrivete un milione di righe di dati). Scrivete
'n'
invece di
endl
.C'era un bug in versioni molto vecchie di GCC (pre-2004) che rallentava significativamente iostreams C++. Non usate compilatori antichi.


Evitare questi trabocchetti, e cin/cout sarà veloce quanto
scanf/printf. I miei benchmark indicano che cin/cout è effettivamente più veloce del 5%-10%. Questo è probabilmente dovuto al fatto che
scanf/printf hanno bisogno di interpretare il loro argomento format string a runtime e incorrere nell'overhead di varargs per gli altri argomenti, mentre la risoluzione dell'overload per cin/cout avviene tutta a tempo di compilazione. In ogni caso, la differenza è abbastanza piccola da non doversi preoccupare in entrambi i casi, poiché quasi nessun codice ragionevole esegue così tanto input/output da far sì che la differenza abbia importanza.