2012-01-29 52 views
11

是什么编程语言这三种输入功能之间的差异。 他们以不同的方式输入彼此吗?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

哪一个花费最少的时间,当输入整数?

我使用在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> 
+0

当C++编程,你想用'cin'。自从您提供了C和C++标签以来,很难给出一个很好的答案。你在使用哪一个?他们不是同一种语言。 – 2012-01-29 12:04:24

+1

删除了'C'标记,因为'cin'不存在C.其中 – 2012-01-29 12:08:21

回答

4

我在codechef一个问题,即必须输入许多整数ABD发现该char_unlocked()比scanf函数比CIN

+0

显式地指出一个问题“数据集是巨大的,使用速度更快的I/O的方法。”:http://uva.onlinejudge.org/ external/124/12440.html](http://uva.onlinejudge.org/external/124/12440.html) – thiagowfx 2013-05-26 03:20:59

26

两点考虑快了快了。

  1. getchar_unlocked在Windows反对,因为它是getchar()线程不安全的版本。

  2. 除非速度的因素太多必要,尽量避免getchar_unlocked

现在,就速度而言。

getchar_unlocked > getchar 

,因为在没有getchar_unlocked输入流锁定检查这使得它是不安全的。

getchar > scanf 

因为getchar读取输入的一个单独的字符是字符类型而scanf的可以读取最原始类型的可用的在C。

scanf > cin (>> operator) 

,因为这种检查link

所以,最后

getchar_unlocked > getchar > scanf > cin 
+0

我没有得到这个比较:** getchar_unlocked> getchar> scanf> cin **,因为除了'cin '(这是一个对象),所有其他的都是函数。比较功能速度是有道理的。但是,如何将函数与对象进行比较?它甚至没有意义。然而,你可以将这些函数与'cin'支持比较,例如'operator >>'重载和'read()',它们有不同的折衷,例如'read()'比'operator >>'快,但它不会' t格式化缓冲区。 – Nawaz 2015-08-14 06:13:51

+0

@Nawaz答案是在问题的上下文中明确指出功能之间的比较。 – 2015-08-15 13:00:53

+0

你没有比较功能,就是我说的。 – Nawaz 2015-08-15 13:05:06

相关问题