getchar_unlocked () VS scanf () VS cin - PullRequest
13 голосов
/ 29 января 2012

В чем разница между этими тремя функциями ввода на языке программирования. Они вводят по-разному друг от друга?

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

Какой из них занимает меньше всего времени при вводе целых чисел?

Я использую заголовочные файлы THese в c ++, где все 3 случая запускаются в c ++;

  #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>

Ответы [ 2 ]

28 голосов
/ 29 мая 2013

Два вопроса для рассмотрения.

  1. getchar_unlocked устарела в Windows, поскольку является небезопасной версией getchar().

  2. Если коэффициент скорости не слишком необходим, старайтесь избегать getchar_unlocked.

Теперь, что касается скорости.

    getchar_unlocked > getchar

потому что в getchar_unlocked нет проверки блокировки входного потока, что делает его небезопасным.

    getchar > scanf

потому что getchar читает один символ ввода, который является типом char, тогда как scanf может читать большинство примитивных типов, доступных в c.

    scanf > cin (>> operator)

потому что проверьте эту ссылку

Итак, наконец

getchar_unlocked > getchar > scanf > cin
4 голосов
/ 01 августа 2012

У меня была проблема в codechef, когда пришлось вводить много целых чисел. Abd обнаружил, что char_unlocked () быстрее, чем scanf, который быстрее, чем cin

...