如何加快c++程序的运行时间

今天给大家讲几种可以优化程序时间的东西

1.O2优化

O2优化是一种手动优化程序时间的东西,但是请注意,在考试中千万不能使用,否则会 c e ce ce

#pragma once
#pragma GCC diagnostic error "-std=c++11"
#pragma GCC target("avx")
#pragma GCC optimize(2)
#pragma GCC optimize(3, "Ofast", "inline")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

2.快读快写

我们知道,在 c c c++中有两种操作,一种是输入,一种是输出。 我们在 c c c++中一般用 c i n cin cin c o u t cout cout s c a n f scanf scanf p r i n t f printf printf 来输入输出。 但是在一些有大量输入输出的时候,上面的两种输入输出都太慢了。 那么接下来,就给大家讲一种更快的输入输出。 他们就是快读快写

快读快写的原理就是在 c c c++中,单个字符串的读写比数字的读写要快,所以我们就将一个数字拆成单个单个的字符来读写。

快读模版:

int read()
{
	bll s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){  
		if(ch=='-')  //处理负数
			f=-1;
		ch=getchar();  //处理其他字符
	}
	while(ch>='0'&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*f;
}

快写模版:

void write(int x)
{
    if(x<0){
    	putchar('-');
		x=-x;
	}
    if(x>9) 
		write(x/10);
    putchar(x%10+'0');
}

3.内联函数

本人懒得讲内联函数,所以给你们别人的博客网址,自己去学。
内联函数详解

4.其他优化

(1):正确选择编译器
请大家注意,有些时候,编译器的选择同样会改变代码运行的时间。
比如说各大运行速度中, c ( c l a n g ) > c > c + + 11 c l a n g > c + + ( n o i ) > c + + 11 > c + + c(clang)>c>c++11clang>c++(noi)>c++11>c++ c(clang)>c>c++11clang>c++(noi)>c++11>c++

(2): c i n cin cin c o u t cout cout优化

1 1 1

std::ios::sync_with_stdio()

C++为了兼容C语言,保证在代码中同时出现std::cout/std::cin和printf/scanf方法时不发生混乱,所以C++使用了一个缓冲区来同步C的标准IO流,通过使用std::ios::sync_with_stdio(false)来解除这种同步,使得cout和cin不再经过缓冲区,进而节省了部分时间。
但是要注意:解除了同步之后,不能再使用C的库函数(scanf,getchar,gets,fgets,fscanf之类)

2 2 2

std::cin.tie

因为std :: cin默认是与std :: cout绑定的,所以每次操作的时候(也就是调用”<<”或者”>>”)都要刷新(调用flush),这样增加了IO的负担,通过tie(nullptr)来解除std :: cin和std :: cout之间的绑定,来降低IO的负担使效率提升。

3 3 3
把所有变量都设为全局变量,不要设为局部变量。
因为定义全局变量比局部变量更节省时间。

以上就是本蒟蒻给大家讲的几种时间优化方法,希望大家有所收获。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值