zoukankan      html  css  js  c++  java
  • 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
    

    面向对象编程

    参看菜鸟教程

  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/huaruoji/p/14425573.html
Copyright © 2011-2022 走看看