getchar_unlocked()VS scanf()VS cin

Ani*_*rya 13 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;
  }   
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Sob*_*nty 28

要考虑两点.

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

  2. 除非速度因素太多,否则尽量避免getchar_unlocked.

现在,就速度而言.

    getchar_unlocked > getchar
Run Code Online (Sandbox Code Playgroud)

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

    getchar > scanf
Run Code Online (Sandbox Code Playgroud)

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

    scanf > cin (>> operator)
Run Code Online (Sandbox Code Playgroud)

因为请检查此链接

所以,最后

getchar_unlocked > getchar > scanf > cin
Run Code Online (Sandbox Code Playgroud)


小智 4

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