• OI中的C++语法基础&进阶技巧


    前言: 写这个的目的主要是为了总结在OI中用到的C++语法奇淫巧技以及在入门的时候没学好的C/C++语言语法部分


    数据类型

    OI中常用的数据类型大小

    数据类型范围位数
    int-2147483648~214748364710
    unsigned int0~429496729510
    long long-9223372036854775808~92233,72036,85477,580719
    unsigned long long0~1844674407370955161520

    总之,9位数能安全地用int存下,18位数用long long,19位数或是 2 64 2^{64} 264以内用unsigned long long.

    另外,合理利用unsigned类型的自动溢出机制可以实现取模运算中的骚操作–快速乘.

    输入输出相关(printf,cout)

    关于printf菜鸟教程已经讲得很详细了,下面给出几个实例:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
    	printf("%-6d
    ",3);
    	printf("%+06d
    ",3);
    	printf("%010.2f
    ",32434.434);
    	unsigned long long a=1;
    	for(int i=1;i<=64;i++) a*=2; a--;
    	printf("%llu",a);
    	
    	return 0;
    }
    

    输出:

    3
    +00003
    0032434.43
    18446744073709551615
    

    结构体(struct)

    结构体以前比较常用的是带结构体排序,就不再提及.高阶技巧便是把结构体当作一个简单版class用,可以封装一些函数,结构体中的运算符重载也能节约不少时间.

    初始化

    struct test
    {
    	int a,b,c;
    	test(int p,int q)
    	{
    		a=p,b=q;
    	}
    	test(char s)
    	{
    		c=s-'A';
    	}
    };
    
    int main()
    {
    	test a=test(3,5);
    	test b(3,5);
    	test c('A');
    	cout<<a.a<<' '<<b.b<<' '<<c.c;
    	
    	return 0;
    }
    

    输出:

    3 5 0
    

    简单来讲就是让新建一个结构体变量的操作变方便了

    运算符重载

    别看代码短,其实有很多东西

    struct test
    {
    	int a,b,c;
    	test(int p,int q)
    	{
    		a=p,b=q;
    	}
    	/*
    	下面这个函数的返回值为bool,重载的运算符为<,运算符左边的数据类型为test,右边
    	的数据类型也为test
    	括号内const和&的用途在于加速和不改变源值
    	第二个const放在非静态成员函数的尾部,表示该非静态成员函数不修改对象内容
    	*/
    	bool operator < (const test &m) const
    	{
    		if(a<m.a) return false;
    		else return true;
    	}
    	bool operator > (const test &m) const
    	{
    		if(b>m.b) return true;
    		else return false;
    	}
    	int operator + (const test &m) const 
    	{
    		return a+b+m.a+m.b;
    	}
    	test operator - (const test &m) const
    	{
    		test q(a-m.a,b-m.b);
    		return q;
    	}
    };
    
    int main()
    {
    	test a=test(3,5);
    	test b(2,6);
    	test c(3,7);
    	cout<<(a<b)<<' '<<(a>b)<<' '<<(a+b)<<' '<<(b-c+a);
    	
    	return 0;
    }
    

    输出:

    1 0 16 6
    

    面向对象编程

    参看菜鸟教程

  • 相关阅读:
    json-lib 中关于null与"null"
    Android SDK及Build版本配置说明
    WebStorm下Webpack的Source map问题
    简述Javascript的原型链
    Hbuilder中添加Babel自动编译
    理解Java的lamda表达式实现
    CountDownLatch多个主线程等待示例
    关于CyclicBarrier的执行顺序
    【转载】让Go2Shell支持ITerm2 和x-term
    【原创】mac下为eclipse安装反编译插件
  • 原文地址:https://www.cnblogs.com/huaruoji/p/14425573.html
Copyright © 2020-2023  润新知