2012-01-29 5 views
11

प्रोग्रामिंग भाषा में इन तीन इनपुट फ़ंक्शंस में अंतर क्या है। क्या वे एक-दूसरे से अलग-अलग तरीकों से इनपुट करते हैं?getchar_unlocked() वीएस स्कैनफ़() वीएस सीएन

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

कौन सा कम से कम समय में जब इनपुट पूर्णांक लेता है?

मैं C++ में थीज़ हेडर फ़ाइलों का उपयोग करता हूं जहां सभी 3 cased 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

जब सी ++ में प्रोग्रामिंग, आप 'cin' उपयोग करना चाहते हैं। प्रश्न के लिए एक अच्छा जवाब देना मुश्किल है क्योंकि आपने सी और सी ++ टैग दोनों की आपूर्ति की है। कौन सा एक आप प्रयोग कर रहें है? वे एक ही भाषा नहीं हैं। –

+1

'c' टैग हटा दिया गया है क्योंकि सी –

उत्तर

4

मुझे लगता है कि इनपुट कई पूर्णांकों पड़ा codechef में एक समस्या अब्द पता चला था कि char_unlocked() scanf जो

+0

में' cin' मौजूद नहीं है, एक समस्या जो बताती है कि "डेटासेट बड़ा है, तेजी से I/O विधियों का उपयोग करें।": [Http://uva.onlinejudge.org/ बाहरी/124/12440.html] (http://uva.onlinejudge.org/external/124/12440.html) – thiagowfx

26

दो बिंदुओं पर विचार करने के लिए CIN की तुलना में तेजी है की तुलना में तेजी है।

  1. getchar_unlocked विंडोज में पदावनत क्योंकि यह getchar() का धागा असुरक्षित संस्करण है।

  2. जब तक गति कारक बहुत आवश्यक नहीं है, getchar_unlocked से बचने का प्रयास करें।

अब तक, जहां तक ​​गति का संबंध है।

getchar_unlocked > getchar 

क्योंकि getchar_unlocked में कोई इनपुट स्ट्रीम लॉक चेक नहीं है जो इसे असुरक्षित बनाता है।

getchar > scanf 

क्योंकि getchar इनपुट के एक एकल वर्ण जो चार प्रकार जबकि scanf ग में उपलब्ध आदिम प्रकार के सबसे पढ़ सकते है पढ़ता है।

scanf > cin (>> operator) 

क्योंकि जांच इस link

तो, अंत में

getchar_unlocked > getchar > scanf > cin 
+0

मुझे यह तुलना नहीं मिलती है: ** getchar_unlocked> getchar> scanf> cin **, क्योंकि 'cin को छोड़कर '(जो एक वस्तु है), अन्य सभी कार्य हैं। कार्यों की गति की तुलना करना समझ में आता है। हालांकि, आप किसी ऑब्जेक्ट के साथ फ़ंक्शंस की तुलना कैसे कर सकते हैं? यह भी समझ में नहीं आता है। हालांकि आप इन कार्यों की तुलना विभिन्न कार्यों 'सीआईएन' समर्थन जैसे 'ऑपरेटर >>' ओवरलोड और 'रीड()' के साथ कर सकते हैं, जिनमें विभिन्न ट्रेडऑफ हैं, उदाहरण के लिए 'पढ़ा() 'ऑपरेटर से तेज है >> लेकिन यह' बफर प्रारूपित नहीं है। – Nawaz

+0

@ नवाज उत्तर प्रश्न के संदर्भ के साथ है जहां यह स्पष्ट रूप से कार्य करता है कि तुलना कार्यों के बीच है। –

+0

आप कार्यों की तुलना नहीं कर रहे हैं, मैं यही कह रहा हूं। – Nawaz