📜  getchar_unlocked()–在C C ++中更快地输入以进行竞争性编程(1)

📅  最后修改于: 2023-12-03 15:15:15.218000             🧑  作者: Mango

getchar_unlocked() – 在C/C++中更快地输入以进行竞争性编程

在竞争性编程中,输入输出时间往往会影响程序的时间复杂度和执行时间。而使用getchar(),cin,scanf等标准输入函数则会导致IO操作时间较长,影响程序的时间复杂度。这里我们介绍一个更快的输入函数——getchar_unlocked(),它可以提高C/C++程序输入的速度。

getchar_unlocked()函数

getchar_unlocked()是一个非标准I/O函数,它用于从标准输入流获取一个字符。它比getchar()更快,因为它不会执行线程锁定操作。但是,当多个线程试图同时读取stdin流时,可能会遇到问题。

该函数在头文件 unistd.h 中声明,并定义为:

int getchar_unlocked(void);

在C++中,这个函数的原型是:

int getchar_unlocked();

尚无界面或参数可供输入或选择。该函数返回下一个字符或EOF(如果输入结束或出现错误)。

如何使用getchar_unlocked()函数

我们可以使用一个循环来使用getchar_unlocked()函数。以下是一个示例程序:

#include <bits/stdc++.h>
using namespace std;

inline void read(int &x) {
    x = 0;
    char c = getchar_unlocked();
    while(c < '0' || c > '9') {
        c = getchar_unlocked();
    }
    while(c >= '0' && c <= '9') {
        x = (x<<3) + (x<<1) + (c-'0');
        c = getchar_unlocked();
    }
}

int main() {
    int n = 0;
    read(n);
    printf("%d", n);
    return 0;
}

在这个示例中,我们使用一个inline函数来读取n的值。该函数使用getchar_unlocked()函数读取输入流中的字符,并将其转换为整数。

总结

getchar_unlocked()函数可以提高C/C++程序的输入效率。由于该函数在多个线程同时使用时可能会遇到问题,因此应该仅在竞争性编程等不需要多线程的情况下使用它。

虽然getchar_unlocked()函数比标准输入函数快,但是在实际应用中,使用getchar_unlocked()函数并不总是能够让你的程序更快。因此,最好先尝试使用标准输入函数,如果标准输入函数无法满足你的需求,再考虑使用getchar_unlocked()函数。