超级读入&输出优化

本文介绍了一种使用mmap进行快速文件读写的技巧,通过内存映射文件,读写速度可以提升一倍。然而,输出操作仍依赖于write函数,存在RE问题。文章提供了一个在Linux环境下实现的代码示例,展示了如何使用mmap进行高效的数据读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.
mmapmmapmmap真的是黑科技,用了之后时间减半
但是输出还是只能靠writewritewrite,不知道为什么用mmapmmapmmapRERERE
应该算是一个比较好的快速读写模板了吧,到时候再把输出也换成mmapmmapmmap
(以下代码均在LinuxLinuxLinux环境下编译,windowswindowswindowsg++g++g++不行)

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<algorithm>
#include<sys/mman.h>
using namespace std;
struct buf{
	char*s;
	buf():s((char*)mmap(0,150000010,PROT_READ,MAP_PRIVATE,fileno(stdin),0)){}
	operator int(){
		int x=0,y=0;
		while(*s<48) ++s;
		while(*s>32) x=x*10+*s++-48;
		return x;	
	}
}it;
struct ouf{
	char*s,*t,*r,*l;
	ouf():s((char*)malloc(500000000)),r((char*)malloc(20)),t(s){}
	~ouf(){ write(1,s,t-s);	}
	inline void operator()(int x){
		if(!x) *t++=48;
		else{
			for(l=r;x;x/=10) *++l=x%10|48;
			for(;l!=r;*t++=*l--);
		}
		*t++='\n';
	}
} ot;
int main(){
	ot(it+it);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值