c++ 读入的测试

处理器Intel 酷睿i5 6300U

1.cin

测试对象:1000W个int类型数

#include <bits/stdc++.h>
int main(){
    freopen("num.txt","r",stdin);
    int a;
    for(int i=1;i<=10000000;i++) std::cin>>a;
    return 0;
} 

跑了 5.8s , 活脱脱的变慢了

测试测试对象:1MB的字符。

#include <bits/stdc++.h>

int main(){
    freopen("string.txt","r",stdin);
    char a;
    for(int i=1;i<=10000000;i++) std::cin>>a;

    return 0;
} 

用char读用时1.2s。

#include <bits/stdc++.h>
int main(){
    freopen("string.txt","r",stdin);
    std::string st;
    std::cin>>st;
    return 0;
} 

用string读用时3.6s。。。。。

改变对象为20MB时,cin读 char 和string分别耗时7.65s和23.81s

2.std::ios::sync_with_stdio(false) 取消cin与stdin同步之后

#include <bits/stdc++.h>
using namespace std;
int main(){
    freopen("string.txt","r",stdin);
    sync_with_stdio(false);
    char a;
    for(int i=1;i<=50000000;i++) cin>>a;
    return 0;
} 

同样20MB的用时1.585s,快好多啊!

3.scanf

#include <bits/stdc++.h>
using namespace std;
int main(){
    freopen("num.txt","r",stdin);
    int a;
    for(int i=1;i<=10000000;i++) scanf("%d",&a);
    return 0;
} 

1000W个数用时4.9s比cin快,但优势不太明显。

20MB的字符读入用时3.525s,比cin快太多了,但还是有可以提升的空间。

4.getchar

getchar 是 c++里面较快的读入了。

#include <bits/stdc++.h>
using namespace std;
int read(){
    int x=0; char ch=getchar();
    while (ch<‘0‘ || ch>‘9‘) ch=getchar();
    while (ch>=‘0‘ && ch<=‘9‘){ x=x*10+ch-‘0‘; ch=getchar(); }
    return x;
}
int main(){
    freopen("num.txt","r",stdin);
    int a;
    for(int i=1;i<=10000000;i++) a=read();
    return 0;
} 

读1000W个数字用时0.65s,比cin/scanf快很多有没有!
读20MB的字符也只要0.288s,好快!

5.fread

将文件全部读入到一个字符串里

#include <bits/stdc++.h>
const int MAXS = 60*1024*1024;

int numbers[10001000];
char buf[MAXS];

void read(char *buf,int len = MAXS){
    int i;
    numbers[i=0]=0;
    for (char *p=buf;*p && p-buf<len;p++)
        if (*p == ‘ ‘)
            numbers[++i]=0;
        else
            numbers[i] = numbers[i] * 10 + *p - ‘0‘;
} 

int main(){
    freopen("num.txt","rb",stdin);
    int len = fread(buf,1,MAXS,stdin);
    buf[len] = ‘/0‘;
    read(buf,len);
} 

0.45s竟然比getchar还慢。。。

总结试一下,再某些读入超大的题目中,果然还是getchar好用啊。至少要保证算法复杂度能过的情况下不被卡输入。。。好像有的程序,卡卡读入问题就能过了。。。。

时间: 2024-10-13 22:13:46

c++ 读入的测试的相关文章

【实用】Dev C++编译器属性代码缺省源样例代码

这是我刚刚发明的东西,比较好用... 源代码复制到Dev C++编译器属性的代码缺省源内即可.. 用法: 包含常用头文件和ctime时间监控插件,常用缩写,快速读入,测试输出函数两个,读入函数,文件读入读出函数,work函数,主函数,还定义了所有的字母变量和常用的其他数组之类的变量.. 上手很快,功能强大..大家自己做一点补充吧.. 那些模板不想放进来,免得A+B都有好几K.. #include<iostream> #include<cstdlib> #include<cst

CCF 201703-3 Markdown

问题描述 试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档.例如以下这段文本就是用 Markdown 的语法写成的: 这些用 Markdown 写成的文本,尽管本身是纯文本格式,然而读者可以很容易地看出它的文档结构.同时,还有很多工具可以自动把 Markdown 文本转换成 HTML

TF-IDF算法(2)—python实现

参加完数模之后休息了几天,今天继续看TF-IDF算法.上篇中对TF-IDF算法已经做了详细的介绍,在此不再赘述.今天主要是通过python,结合sklearn库实现该算法,并通过k-means算法实现简单的文档聚类. 一 结巴分词 1.简述 中文分词是中文文本处理的一个基础性工作,长久以来,在Python编程领域,一直缺少高准确率.高效率的分词组建,结巴分词正是为了满足这一需求而提出. 2.安装 (1)全自动安装 在安装了easy—stall的情况之下可以全自动安装:easy_install j

matlab pca基础知识

PCA的一些基本资料 最近因为最人脸表情识别,提取的gabor特征太多了,所以需要用PCA进行对提取的特征进行降维. 本来最早的时候我没有打算对提取的gabor特征进行降维,但是如果一个图像时64*64,那么使用五个尺度八个方向的gabor滤波器进行滤波,这样提取的特征足足有64*64*5*8这么多,如果图像稍微大一点,比如128*128的图像,那么直接提取的特征就会几十万,所以不降维的话直接用SVM训练分类器是非常困难的. 所以在这段时间我就学习了一下PCA降维的基本原理和使用方法,网上给出的

R语言爬虫 rvest包 html_text()-html_nodes() 原理说明

library(rvest) 例子网页:http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=010000%2C00&funtype=0000&industrytype=00&keyword=%E6%95%B0%E6%8D%AE&keywordtype=2&lang=c&stype=2&postchannel=0000&fromType=1&c

例4.10 POJ3525/LA3890离海最远的点 半平面交 + 二分法 + double小数点后有效位数处理方式/printf与g++、c++的问题

0) 题意: 题意很简单,给出一张四面环海的岛屿的地图,岛屿用顶点表示(题目数据保证岛屿是凸多边形--所谓凸多边形与凹多边形区别,凸多边形就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边形的其他各边均在此直线的同旁,那么这个多边形就叫做凸多边形.)找出岛屿上距离大海距离最长的一个点.即求岛屿上距离岛屿各条边边中最短的距离是所有点中最长的那个点.即求岛屿中的内接圆的圆心点.输出这个点到岛屿的边的最短的距离.即该岛屿中那个内接圆的半径... 分析: 半平面交求内核点集是一个点的情况(用精

Python科学计算结果的存储与读取

总结于2019年3月17日  荆楚理工学院 计算机工程学院 一.前言 显然,作为一名工科僧,执行科学计算,需用Python.PS:快忘记Matlab吧.我用了二十年的时间,熟练掌握了Matlab的用法,然后,很可能,我用6个月不到的时间,选择并实现了用Python替换Matlab.虽然来到了计算机工程学院,但是工程计算是本业,不能久,然后我突然间发现,好多时候,只用pyplot显示结果,我们的计算结果,很多时候需要存储和重复调用的哪,一个图的话,若再需要数据,下次需要,难道再发费几小时重新计算?

LINQ To SQL 的性能 (列出部分的测试程序)

摘要:LINQ To SQL 的性能 (列出部分的测试程序) 一时兴起,测了一下LINQ To SQL的性能, ?以100000笔数据的读入来测试,为求平衡,特别以5次读取之总值测试. 读取方式 结果 With Un-Typed DataTable Load (use DataAdapter without Delete/Insert/Update assocation) 5188 ms With LINQ To SQL??????????????????????????????????????

OI常用读入方式效率测试

我来填坑了. 这次我用自己写的测试读入的程序来分别测试cin(不关闭流同步),scanf和读入优化的效率差别. 我们分别对三个阶段的数据量n进行测试,通过时间比对来观察性能的差异. n = 102时 n = 104时 n = 105时 为了保证测试准确并且减小偶然误差,本次测试的所有数据均为随机数. 对于每一个数据量连续测试五组不同的随机数,取平均值作为参考. 随机数生成器: 1 #include<cstdio> 2 #include<ctime> 3 #include<cs