Getchar_unlocked() VS scanf() VS cin
В чем разница между этими тремя функциями ввода в языке программирования.
Они вводятся разными способами друг от друга?
1.getchar_unlocked()
#define getcx getchar_unlocked
inline void inp( int &n )
{
n=0;
int ch=getcx();int sign=1;
while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getcx();}
while( ch >= '0' && ch <= '9' )
n = (n<<3)+(n<<1) + ch-'0', ch=getcx();
n=n*sign;
}
2.scanf("%d",&n)
3.cin>>n
Какой из них занимает наименьшее время при вводе целых чисел?
Я использую эти заголовочные файлы в С++, где все 3 обходные операции выполняются в С++;
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
Ответы
Ответ 1
Рассматриваются две точки.
-
getchar_unlocked
устарел в Windows, потому что это небезопасная версия getchar()
.
-
Если коэффициент скорости слишком большой, попробуйте избежать getchar_unlocked
.
Теперь, что касается скорости.
getchar_unlocked > getchar
потому что проверка блокировки входного потока отсутствует в getchar_unlocked
, что делает его небезопасным.
getchar > scanf
потому что getchar
читает один символ ввода, который является char, тогда как scanf может читать большинство примитивных типов, доступных в c.
scanf > cin (>> operator)
потому что проверьте эту ссылку
Итак, наконец
getchar_unlocked > getchar > scanf > cin
Ответ 2
У меня была проблема с кодеком, который должен был ввести много целых чисел abd, обнаруживших, что char_unlocked() быстрее, чем scanf, который быстрее, чем cin