getchar_unlocked()VS scanf()VS cin

时间:2012-01-29 11:17:09

标签: c++ scanf

编程语言中这三个输入函数有什么区别。 他们是否以不同的方式相互输入?

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 ++中使用THese头文件,其中所有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 个答案:

答案 0 :(得分:28)

需要考虑两点。

  1. getchar_unlocked在Windows中已弃用,因为它是getchar()的线程不安全版本。

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

  3. 现在,就速度而言。

        getchar_unlocked > getchar
    

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

        getchar > scanf
    

    因为getchar读取输入的单个字符是char类型,而scanf可以读取c中可用的大多数基本类型。

        scanf > cin (>> operator)
    

    因为请检查此link

    所以,最后

    getchar_unlocked > getchar > scanf > cin
    

答案 1 :(得分:4)

我在codechef中遇到一个问题,必须输入许多整数abd,发现char_unlocked()比scanf快,比cin快