细节及杂项整理

本文介绍了C++编程中的几个重要细节,包括万能头文件的使用、常量声明、typedef的应用、freopen函数在输入输出中的角色,以及预处理器指令#define、#undef、#ifdef和#ifndef的作用。此外,还探讨了auto关键字的智能类型推断功能,强调其在简化代码和提高效率上的帮助。
摘要由CSDN通过智能技术生成

万能头文件

#include <bits/stdc++.h>

包含常用函数需要的头文件,省去写头文件花的时间。
部分OJ不支持万能头(比如POJ)
比赛时需要在热身赛进行测试万能头是否可用,防止因CE耽误时间甚至造成罚时

常量声明

#define N 5000
const int N=1e5+5;

把使用频繁的数字声明成常量,如果需要修改只需要修改一处即可。常用const定义常量。
常用常量:

const int N=5e3+5;					//数组大小,根据题目确定
const int mod=1e9+7;				//模数,一般为1e9+7或998244353,具体根据题目确定
const ll inf=0x3f3f3f3f3f3f3f3f;	//无穷大,使用int或者ll根据题目确定
//const int inf=0x3f3f3f3f;
const double eps=1e-10;				//无穷小
//const int tmp=31;					//字符串哈希时使用

typedef

typedef long long ll;
typedef unsigned long long ull;

主要是为了方便定义long long变量。

freopen

freopen("in", "r", stdin);		//读
freopen("out", "w", stdout);	//写

其中第一个参数是文件名。
用于从文件中输入/输出到文件内。输入常在Clion中使用,或者用于长样例且无法复制粘贴时,输出常用来进行空格、换行等字符的比对(因为直接输出到屏幕无法轻易判断空格、换行等字符)。

define&undef

#define x y
#undef x

通常用于写了大段代码之后发现变量名字敲错了又懒得一个个删掉重新改的情况。。。(当然如果里面包含正确的x和错误的x那就不能这样修改了)

ifdef&ifndef

#ifdef DEBUG
    ...
#endif

#ifndef ONLINE_JUDGE 
    ...
#endif

编译器会在编译时判断是否define过查询的标识符。ifdef是如果define过则后面的代码生效,ifndef则是没有define则生效。endif是结束ifdef或者ifndef。
可以配合freopen使用,以达到本地从文本输入,提交后正常输入的效果。
通常OJ会定义一个ONLINE_JUDGE,我们可以判断这个标识符是否被定义,如果没有定义则认为是本地运行。
对于没有定义标识符的OJ,可以自己在本地定义一个标识符,比如在Clion的CMakeLists.txt内加入

set(CMAKE_CXX_FLAGS -DDEBUG)

这样就定义了一个DEBUG,-D后面跟着的就是标识符。这样可以自己定义标识符,不依赖OJ定义的ONLINE_JUDGE

auto

auto可以替代任意的数据类型,但是必须是在编译时已经明确了的数据类型,比如可以采用auto a=1,但是不可以使用auto定义a这个样子。
可以用于替代名字很长的数据类型,比如迭代器等等。

map<int,int>mp;
for(auto it:mp)
{
	...
}

不定期更新,想到哪更到哪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值