2012-01-29 16 views
11

Jaka jest różnica między tymi trzema funkcjami wejściowymi w języku programowania. Czy robią to na różne sposoby?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

Który zajmuje najmniej czasu, gdy wejście liczby całkowite?

Używam plików nagłówkowych THese w języku C++, gdzie wszystkie 3 operacje wykonywane są w 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> 
+0

Podczas programowania w języku C++, którego chcesz użyć 'cin'. Trudno podać dobrą odpowiedź na to pytanie, ponieważ podałeś zarówno tagi C, jak i C++. Którego używasz? Nie są tym samym językiem. –

+1

Usunięto znacznik 'c', ponieważ' cin' nie istnieje w C. –

Odpowiedz

4

miałem problem w codechef które musiały wejściowych wielu liczb abd okazało się, że char_unlocked() jest szybsza niż scanf który jest szybszy niż cin

+0

Jeden problem, który wyraźnie stwierdza, że ​​"Zbiór danych jest ogromny, użyj szybszych metod wejścia/wyjścia.": [Http://uva.onlinejudge.org/ external/124/12440.html] (http://uva.onlinejudge.org/external/124/12440.html) – thiagowfx

26

dwa punkty do rozważenia.

  1. getchar_unlocked jest przestarzałe w systemie Windows, ponieważ jest to niebezpieczne wątek wersja getchar().

  2. O ile współczynnik prędkości nie jest zbyt potrzebny, staraj się unikać getchar_unlocked.

Teraz, jeśli chodzi o prędkość.

getchar_unlocked > getchar 

ponieważ nie ma sprawdzenia blokady strumienia wejściowego w getchar_unlocked, co czyni go niebezpiecznym.

getchar > scanf 

ponieważ getchar czyta pojedynczy znak wejścia, które jest typu char natomiast scanf może odczytać większość prymitywnych typów dostępny w ok.

scanf > cin (>> operator) 

ponieważ kontrola ta link

Więc wreszcie

getchar_unlocked > getchar > scanf > cin 
+0

Nie mam porównania: ** getchar_unlocked> getchar> scanf> cin **, ponieważ oprócz 'cin '(który jest obiektem), wszystkie inne są funkcjami. Porównywanie funkcji ma sens. Jak jednak porównać funkcje z obiektem? To nie ma nawet sensu. Możesz jednak porównywać te funkcje z różnymi funkcjami obsługi 'cin', takimi jak' operator >> 'przeciążenia i' read() ', które mają różne kompromisy, np.' Read() 'jest szybsze niż' operator >> 'lecz nie robi ' t sformatuj bufor. – Nawaz

+0

@Nawaz odpowiedź jest w kontekście pytania, gdzie wyraźnie stwierdza porównanie między funkcjami. –

+0

Nie porównujesz funkcji, tak mówię. – Nawaz