ACM输入函数测试 - scanf cin 优化的输入

2017-08-27 10:26:19

writer:pprp

进行测试如下四种输入方式:

1、scanf

2、cin

3、用了ios::sync_with_stdio(false);的cin

4、自己写的输入函数(如下)

inline int read()
{
    int X=0,w=1;
    char ch=0;
    while(ch<‘0‘ || ch>‘9‘)
    {
        if(ch==‘-‘) w=-1;
        ch=getchar();
    }
    while(ch>=‘0‘ && ch<=‘9‘) X=(X<<3)+(X<<1)+ch-‘0‘,ch=getchar();
    return X*w;
}

测试先随机生成了1000以内数,保存在out.txt文件中,大概2M的内容

开始测试输入:

代码如下:

/*
@theme:ACM输入输出测试
@writer:pprp
@declare:测试scanf,优化的输入,和cin
@date:2017/8/26
*/
#include <bits/stdc++.h>
#include <iostream>
#include <time.h>
#include <windows.h>
#include <unistd.h>

using namespace std;
const int maxn = 100000;
int a[maxn],b[maxn];

inline int read()
{
    int X=0,w=1;
    char ch=0;
    while(ch<‘0‘ || ch>‘9‘)
    {
        if(ch==‘-‘) w=-1;
        ch=getchar();
    }
    while(ch>=‘0‘ && ch<=‘9‘) X=(X<<3)+(X<<1)+ch-‘0‘,ch=getchar();
    return X*w;
}

int main()
{
    ios::sync_with_stdio(false);
    freopen("out.txt","r",stdin);
//  freopen("out.txt","w",stdout);

    clock_t c = clock();
    for(int i = 0 ; i < maxn ; i++)
    {
//        scanf("%d%d",&a[i],&b[i]);
//        cin >> a[i] >> b[i];
//        a[i] = read();
//        b[i] = read();
    }
    clock_t d = clock();
    cout << d - c << endl;

    fclose(stdin);
    fclose(stdout);
}

测试结果是:时间:自己写的输入函数 < 用了ios::sync_with_stdio(false);的cin < scanf < cin

所以在ACM输入要求严格的情况下,建议采用ios::sync_with_stdio(false)的cin

如果要求更加严格那就采用,自己写的输入函数

时间: 2024-12-30 00:04:55

ACM输入函数测试 - scanf cin 优化的输入的相关文章

C++ 中用cin方式获取输入的几种常用方式

一.前言 在C++程序的编写过程中,可能会经常用到cin方式用来捕获输入设备的输入信息.细分的话,主要的方式有:cin>>.cin.get.cin.getline.在借助键盘等字符输入设备进行输入的时候,如果键入Enter(\r)才会把目标字符输入到缓存区,,键入的'\r'会被转换成一个'\n',这个换行符同样也会被输入到缓存区,当做一个键入字符来处理. 参考资料:https://blog.csdn.net/k346k346/article/details/48213811 二.测试环境 Wi

Web下的整体测试 --性能测试及优化思路

随着Internet的日益普及,现在基于B/S结构的大型应用越来越多,可如何对这些应用进行测试成为日益迫切的问题.有许多测试人员来信问我B/S的测试如何做,由于工作较繁忙,对大家提出的问题也是头痛医头脚痛医脚,没有对WEB的测试过程做一个整体的概述.希望通过本篇能够让大家了解大型Web应用是如何来进行测试的. B/S下的功能测试比较简单,关键是如何做好性能测试.目前大多数的测试人员认为只要跑一些测试工具证明我的产品是可以达到性能的就ok了,为了证明而去测试是没有任何价值的,关键是要发现产品性能上

c++ --&gt; cin和cout输入输出格式

cin和cout输入输出格式 输入 1>. cin 输入结束条件 :遇到Enter.Space.Tab键. int a;cin >> a; 带符号输入,比如输入(a,b,c) int a, b,; cin >> a; cin.ignore( 1, ',' ); cin >> b; 2>. cin.get(数组名,长度,结束符) 其中结束符为可选参数,读入的字符个数最多为(长度-1)个,结束符规定结束字符串读取的字符,默认为ENTER,ch=cin.get()

结对测试算法性能优化(用例设计层面)

在<结对测试算法性能优化(代码层面)>一文中, 对原来算法代码进行了一些优化, 对于笛卡尔积后千条数据,是能满足使用需要的. 但在实际业务中,会碰到百万数据. 比如某接口共18个参数,每个参数均可为空,其中8个只需要单个值,10个为多选项,需要多个值. 对于多选项,我的设计是,全选+随机n个多选(1<=n<=len-1)+空. 按照这个策略,笛卡尔积的结果就是3^8*2^10=6718464. 671万数据! parewise根本处理不动. 该怎么处理? 调整用例设计. 1.为空的

杭电 HDU ACM 1407 测试你是否和LTC水平一样高

测试你是否和LTC水平一样高 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14276    Accepted Submission(s): 4701 Problem Description 大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上! 你的任务是: 计算方程x^2+y^2+z^2= n

输入优化(输入外挂)

有时候用输入挂并不只是为了效率,对于一些以行末为结束(即 '\n' 或 '\r')的若干个数据的读入,此时用输入挂来处理就显得很有必要了,以判断字符是否为 '\n' 或 '\r' 来结束输入,否则单用 scanf 的话无法达到上述效果. 1. 先来一个单纯用于正数读入,并且题目已明确给出输入的整数的个数(即不用手动判断何时为输入结束)的输入挂: 1 #include<cctype> 2 template<typename T> 3 inline void read(T &x

五、测试-六、优化方案

五.测试 1.单元测试 单元测试的方式是黑盒测试,即通过每个环节的输入输出情况进行测试.程序由四个类组成,对应生成四个测试类,使用Junit5对其中的主要方法进行测试.测试的大致思路是预先设计较为简单的数独用例,生成新的对象,运行方法,并将阶段性的结果与预先计算的结果相比较. 有些方法具有返回值,便于设计测试类,例如对 Main::isNumber()进行测试: //Main::isNumber public static boolean isNumber(String str){ String

App的网络环境测试和性能优化

1. 网络环境测试一般是先用网络损伤模拟仪或mock工具模拟常见的七种损伤和5种网络环境,然后再国内外城市采样的方式(带宽和延时)组合测试生成报告, 下面是一些统计图 2. 采样点的选择一般都是根据自己server收集的用户信息.如果新app就要参考近品/竞品或第三方的统计数据拍脑袋 3. 从测试的角度,应该建立实时监控的web portal.其实测试的目的除了保证产品发布的质量.更重要的是为优化提供依据,所以report最后一部分都是issue list 和optmize advice,当然测

c++中字符输入函数getline、cin.getline区分

1.cin>>s; s能够是:string  s.char s[]; 这个是ostream中的函数.遇到' '(空格) , '\n'(换行),就会自己主动结束,因此假设用cin读取字符串,那么这个字符串中不能含有空格和换行. cin由于不识别空格和换行,因此假设在输入字符串的时候,在字符開始处输入了空格或换行,没有不论什么影响. #include <iostream> #include <string> #include <stdio.h> using na