gpt4 book ai didi

c++ - 测量 C++ 中数据排序的性能

转载 作者:行者123 更新时间:2023-11-30 01:03:04 25 4
gpt4 key购买 nike

所以,我们的类(class)得到了这段代码来编译和运行,看看对于不同大小的输入 N 运行需要多长时间:

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[]) {
int N;
sscanf(argv[1], "%d", &N);
vector<double> data(N);
for(unsigned int i=0; i<N; i++) {
data[i] = rand()/(RAND_MAX+1.0);
}
sort(data.begin(), data.end());
copy(data.begin(), data.end(), ostream_iterator<double>(cout,"\n"));
}

我们从未学过 C++,也不需要知道有关此代码如何工作的任何信息。他们甚至为我们提供了编译和运行代码的命令。然而,他们没有提到我们如何准确地衡量程序需要多长时间。我尝试过这种方法:

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <time.h>

using namespace std;

int main(int argc, char *argv[]) {

double start_time = time(NULL);

int N;
sscanf(argv[1], "%d", &N);
vector<double> data(N);
for(unsigned int i=0; i<N; i++) {
data[i] = rand()/(RAND_MAX+1.0);
}
sort(data.begin(), data.end());
copy(data.begin(), data.end(), ostream_iterator<double>(cout,"\n"));

double end_time = time(NULL);
printf("%lf seconds\n", end_time - start_time);

}

字面意思就是包含一个时间库,然后获取程序运行前后的当前时间,最后打印时间差。
我直接从该站点复制的所有内容实际上是因为,在明年之前,我们都不知道(或显然需要知道)如何用 C++ 编写任何代码。

但是,输出总是

0.000000 seconds

即使对于数百万或数十亿大小的输入,我也可以看到它需要几秒钟或几分钟的时间来处理。
我在这段代码中做错了什么?

我读过一些消息来源说要使用 Chrono 库来测量时间,但是当我尝试这样做时,我遇到了更复杂的错误。这至少可以编译和运行,但每次都是错误

最佳答案

您可能希望使用环境的通用工具,而不是修改代码。

例如,在 Linux 中, time 工具:

g++ theCode.cpp -o theProgram
time ./theProgram 10
time ./theProgram 100
time ./theProgram 1000
time ./theProgram 10000

time(NULL)不返回 double ;它返回 time_t .您已将两个时间戳都转换为 double并且可能会导致您自己出现精度问题,因为 UNIX 时间戳非常高,而您期望的秒数差异相对较小。

你应该去掉 double s 并坚持使用 time_t输入 time(NULL)给你。不要忘记更新您的 printf来自 %lff 的格式字符串至 something else .

此外,最好拼写为 time(nullptr)现在,或者您可以使用 <chrono> 中的现代 C++ 功能.

关于c++ - 测量 C++ 中数据排序的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54814101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com