C ++中比较运算符的速度

时间:2015-12-30 12:23:31

标签: c++

今天我遇到了一个问题:

我必须从文件中读取数据,该文件包含很多测试用例,看起来像是

N

N lines followed..

...

...

所以我使用了while(scanf("%d", &n) && n!=-1),但是读取所有数据花了我超过5秒。但是,当我将其更改为while(scanf("%d", &n) && n>-1)时,我只花了800毫秒来读取alll数据。所以我认为C ++中比较运算符的速度存在差异,任何人都可以给我订单吗?

PS:我的编译器是GCC 5.1.0

好的,让我展示一下这个问题的更多细节。 问题在于:http://acm.hdu.edu.cn/showproblem.php?pid=1171

不相等的代码在这里:https://github.com/kimixuchen/codesnap/blob/master/greater

gerater代码在这里: https://github.com/kimixuchen/codesnap/blob/master/not_equal

1 个答案:

答案 0 :(得分:-1)

问题是关于比较,而不是阅读文件或制定不当的条件。所以我们只进行测试比较。使用/O2优化选项测试更新

#include <ctime>
#include <cstdlib>
#include <iostream>
int main()
{

    const int testCases = 10000000;
    const int iterations = 100;
    srand(time(NULL));
    int * A = new int[testCases];
    bool *B = new bool[testCases];
    freopen("output.txt", "w", stdout);

    for (int i = 0; i < testCases; i++)
    {
        A[i] = rand() % 100;
    }

    clock_t begin = clock();

    for (int j = 0; j < iterations; j++)
    for (int i = 0; i < testCases; i++)
    {
        B[i] = A[i] != -1;
    }
    clock_t end = clock();
    double elapsed_secs = end - begin;
    std::cout << "Elapsed time using != - " << elapsed_secs << std::endl;
    //Getting new random numbers for clean test

    for (int i = 0; i < testCases; i++)
    {
        A[i] = rand() % 100;
    }

    begin = clock();

    for (int j = 0; j < iterations; j++)
    for (int i = 0; i < testCases; i++)
    {
        B[i] = A[i] > -1;
    }
    end = clock();
    elapsed_secs = end - begin;
    std::cout << "Elapsed time using > - " << elapsed_secs << std::endl;
    return 0;
}

5项测试的结果(以滴答为单位):

  

'!=':1005 994 1015 1009 1019

     

'&gt;':1006 1004 1004 1005 1035

结论 - 优化速度计划没有显着差异。