实验起因
输出是信息学竞赛的基础,但高等级 OI 中输出量过大容易导致 TLE。因此,学习如何更快输出至关重要。
关于 OLE
洛谷有一种评测状态叫 OLE(Output Limit Exceeded),意为输出超限。
示例代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
while(1){
printf("555555555555555\n");
}
return 0;
}
这段代码会在规定时间内输出大量内容,导致程序被 OJ 强行终止并判定 OLE。这引发了一个广泛说法:cout 效率比 printf 低。为了验证这一传言,我进行了一次实验。
实验设计
为保证公平比较,所有测试遵循以下条件:
- 编译环境:使用 mingw64 的 g++ 编译,参数
-std=c++14 -O2。 - 计时方法:使用 C++11 的
chrono库进行毫秒级计时,单组实验多次取平均值。 - 测试场景:涵盖标准输出、输出重定向到文件、直接使用文件流 (
ofstream) 三种情况。 - 测试数据:从少量(100 个)到大量(1000000 个)递增。
实验过程
标准输入输出
标准输入输出流版本:
#include<iostream>
#include<cstdio>
#include<chrono>
using namespace std;
int main(){
auto program_start = std::chrono::high_resolution_clock::now();
for(int i = ; i < ; i ++){
cout << ;
}
program_end = std::chrono::high_resolution_clock::();
total_duration = std::chrono::<std::chrono::milliseconds>(program_end - program_start);
cout << << total_duration.() << << endl;
;
}


