今天我遇到了一个问题:
我必须从文件中读取数据,该文件包含很多测试用例,看起来像是
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
答案 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
结论 - 优化速度计划没有显着差异。