玄学快读

class IO {
    private:
        // 缓冲大小 
        static const int BUF = 128 * 1024;
        // 输入输出流 
        FILE *in, *out;
        char rbuf[BUF], wbuf[BUF], *rs, *rt;
        int pos;
        // EOF 
        bool eof;
    public:
        // fread 和 fwrite 
        bool load() { return (rt = (rs = rbuf) + fread(rbuf, 1, BUF, in)) == rs;}
        void flush() { fwrite(wbuf, 1, pos, out); pos = 0;}
        
        // 构造和析构 
        IO() { in = stdin, out = stdout, rs = rt = rbuf, pos = 0, eof = 0;}
        ~IO() { flush();}
        
        // 文件 
        void open_r(const void* ch) { in = fopen((char*)ch, "r");}
        void open_w(const void* ch) { out = fopen((char*)ch, "w");}
        void open_r(FILE* p) { in = p;}
        void open_w(FILE* p) { out = p;}
        IO(const void* ch) { in = fopen((char*)ch, "r"), out = stdout, rs = rt = rbuf, pos = 0, eof = 0;}
        IO(FILE* p) { in = p, out = stdout, rs = rt = rbuf, pos = 0, eof = 0;}
        bool end() { return eof;}
        
        // 基础操作 
        inline void pc(const char c) { if(pos >= BUF) flush(); wbuf[pos ++] = c;}
        inline char gc() { if(rs == rt) eof = load(); return eof ? EOF : *rs ++;}
        
        // 读入 
        template<typename T>
        inline IO& operator >> (T &x) {
            register char c, f = 1;
            while(c = gc(), c < '0' || c > '9') if(c == '-') f = ! f;
            x = c ^ 48;
            while(c = gc(), c >= '0' && c <= '9' && !eof) x = (x << 3) + (x << 1) + (c ^ 48);
            return (x = f ? x : -x), *this;
        }
        inline IO& operator >> (char &c) { return c = gc(), *this;}
        inline IO& operator >> (char* c) {
            while(*c = gc(), *c == '\n' || *c == '\r' || *c == ' ' || *c == '\t');
            while(*++ c = gc(), *c != '\n' && *c != '\r' && *c != ' ' && *c != '\t' && ! eof);
            return (*c = '\0'), *this;
        }
        inline IO& getline(char* c)
        { while(*c = gc(), *c != '\n' && *c != '\r' && ! eof) ++ c; *c = '\0'; return *this;}
        inline IO& operator >> (string &s) {
            register char c;
            while(c = gc(), c == '\n' || c == '\r' || c == ' ' || c == '\t');
            s = c;
            while(c = gc(), c != '\n' && c != '\r' && c != ' ' && c != '\t') s += c;
            return *this;
        }
        inline IO& operator >> (long double &x) {
            register char c, op = 1; long double e = 1;
            while(c = gc(), ! isdigit(c)) if(c == '-') op = ! op;
            x = c ^ 48;
            while(c = gc(), isdigit(c)) x = (x * 10) + (c ^ 48);
            if(c == '.') while(e /= 10, c = gc(), isdigit(c)) x += (c ^ 48) * e;
            return (x = op ? x : -x), *this;
        }
        inline IO& operator >> (double &x) {
            long double y; *this >> y; return x = y, *this;
        }
        
        // 输出
        template<typename T>
        inline IO& operator << (T x) {
            if(x < 0) pc('-'), x = -x;
            register T y = 10;
            while(y < x) y = (y << 3) + (y << 1);
            while(y /= 10) pc((x / y) ^ 48), x %= y;
            return *this;
        }
        inline IO& operator << (const char c) { return pc(c), *this;}
        inline IO& operator << (const char* c) { while(*c) pc(*c ++); return *this;}
        //inline IO& operator << (char c) { return pc(c), *this;}
        inline IO& operator << (char* c) { while(*c) pc(*c ++); return *this;}
        inline IO& putline(char* c) { while(*c) pc(*c ++); return pc('\n'), *this;}
        inline IO& operator << (string s) { return *this << s.c_str();}
        template<typename T>
        inline void print(T x, short y) {
            T t; *this << (int)(t = floor(x));
            if(! y) return;
            pc('.');
            while(y) { x -= t, x *= 10; *this << (int)floor(x); y --;}
        }
};

转载于:https://www.cnblogs.com/akakw1/p/10255357.html

Namespace(命名空间)是一种在编程中用来区分各种不同命名元素的机制。它可以将不同的程序元素(变量、函数、类等)进行分组,使得它们在同一个命名空间下能够互相区分。在不同的命名空间中,可以定义具有相同名称的元素,而不会产生冲突。 快读namespace可以理解为快速了解命名空间的意思。在当前广泛使用的编程语言中,命名空间是一种非常常见的概念,如C++中的命名空间、Python中的模块和包、Java中的包等。通过快速了解命名空间,我们可以更好地进行模块化的开发,避免命名冲突,提升代码的可读性、可维护性和可重用性。 了解命名空间的重要性在于,它可以分隔不同模块之间的代码,使得每个模块可以独立开发和测试。在大型项目中,各个模块的开发往往由不同的开发人员负责,通过使用命名空间,可以避免不同模块中的命名冲突,同时也方便了代码的组织和管理。 在编程中,通过使用命名空间,我们可以更好地控制程序的作用域,避免全局变量的滥用。命名空间可以使得变量和函数的作用范围被限制在一个特定的范围内,有利于代码的结构化和模块化。 总而言之,快读命名空间是指通过了解命名空间的概念和使用方法,可以更好地进行模块化开发,提升代码的可读性和可维护性。同时,对于从事软件开发的人来说,掌握命名空间的概念也是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值