企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 题外话 明明在C语言中有scanf()、printf(),C++中有cin、cout,为什么我们还要用输入输出外挂呢? 这个问题很明显,一定是因为这些输入输出函数功能过于强大而导致效率低,(很多时候,功能越强大的东西越臃肿),而我们使用的输入输出外挂既然叫外挂,那说明其一定有很大的优势,而这方面优势就体现在术有专攻上。原来的输入输出函数因为要应对不同类型的输入输出,所以内部一定做了很多的判断,而我们在遇见实际问题时,往往都是对特定类型的进行输入输出,所以这些判断就显得无用且浪费资源。这时,我们的输入输出外挂也就有了存在的必要性,也就应运而生。 我们都知道,scanf()、printf()、cin、cout其实就是对其他一些基础的获取或输出语句(getchar() putchar()等)进行封装,而这些基础的函数功能弱,效率高,所以我们的输入输出外挂也是仿照着scanf()、printf()、cin、cout来实现的,只不过做了针对性的改造,最终我们改造出来多种功能比scanf()等弱、比getchar()等强,效率比scanf()等高、比gerchar()等低的函数,从而达到针对性的作用,减少了不必要的资源消耗。 当然输入输出外挂一般用在大量输入输出的情况下,这样性价比才高一些,否则得不偿失(牺牲了代码长度而换来了微不足道的效率提升)。 ## 适用于正int的 ``` int read() { char ch=' '; int ans=0; while(ch<'0' || ch>'9') ch=getchar(); while(ch<='9' && ch>='0') { ans=ans*10+ch-'0'; ch=getchar(); } return ans; } ``` ## 适用于正负int / LL / double 的. (来自 风神) ``` template <class T> bool scan_d(T &ret) { char c; int sgn; T bit=0.1; if(c=getchar(), c==EOF) return 0; while(c!='-' && c!='.' && (c<'0' || c>'9')) c=getchar(); sgn=(c=='-')? -1:1; ret=(c=='-')? 0:(c-'0'); while(c=getchar(), c>='0' && c<='9') ret=ret*10+(c-'0'); if(c==' ' || c=='\n') { ret*=sgn; return 1; } while(c=getchar(), c>='0' && c<='9') ret+=(c-'0')*bit, bit/=10; ret*=sgn; return 1; } ``` ##  输出 ``` inline void out(int x) { if(x>9) out(x/10); putchar(x%10+'0'); } ```