gpt4 book ai didi

c++ - 'chrono' 库输出错误

转载 作者:行者123 更新时间:2023-11-28 01:14:41 26 4
gpt4 key购买 nike

我试图计算执行插入排序函数期间耗时。所以我做了如下。附言- 函数运行正常并对所有数字进行排序。编译器-GCC window

    auto start = chrono::steady_clock::now();
insertionSort(arr,1000);
auto end = chrono::steady_clock::now();

auto diff = start - end; // gives 0
auto diff = end - start ; // still zero

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;

首先我尝试了 100 个输入,它给了我 0 ms 然后我将它更改为 ns 它仍然给了零。然后我将输入增加到 1000。但遗憾的是产量仍然为零。这是写计时的正确方法吗?有人建议尝试chrono::high_resolution_clock 它仍然给了我 0ns。

或者你们可以建议的任何方法来计算函数的时间。

更新 - 所以我一直在寻找解决方案,所以我发现如果有时做一些类似的事情它会给出结果。

    auto start = chrono::high_resolution_clock::now();
insertionSort(arr,1000);
auto end = chrono::high_resolution_clock::now();

auto diff = end - start;

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;


ofstream write;
write.open("sort.txt");
if(write)
{
for(int i = 0 ; i < 1000 ; ++i)
{
write<<arr[i]<<endl;
}
}
else{
cout<<"Unable to open file.\n";
}




我尝试将它写入文件,现在如果我选择 nano second,它会给我结果。但是,如果我选择 mili,它仍然为零。

这是否意味着插入排序快到 C++ 甚至无法衡量的速度?

这是可重现的代码。

#include<iostream>
#include<fstream>
#include<chrono>
using namespace std;

void readData();
void insertionSort(int * , int );
void readData()
{

int arr[1000];
ifstream read;
read.open("sort.txt",ios::binary);
if(read)
{
int i = 0;
int temp;
while(read>>temp)
{
arr[i] = temp;
++i;
}
read.close();

}
else{
cout<<"Unable to open file.\n";
}


auto start = chrono::high_resolution_clock::now();
insertionSort(arr,1000);
auto end = chrono::high_resolution_clock::now();

auto diff = end - start;

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;

ofstream write;
write.open("sort.txt");
if(write)
{
for(int i = 0 ; i < 1000 ; ++i)
{
write<<arr[i]<<endl;
}
}
else{
cout<<"Unable to open file.\n";
}

}
void insertionSort(int *arr , int size)
{
for(int i = 1 ; i < size ; ++i)
{
int key = arr[i];
int j = i -1 ;
while(j>= 0 && arr[j]> key)
{
arr[j+1] = arr[j];
j--;
}
arr[++j] = key;
}

}
int main()
{
readData();
return 0;
}

最佳答案

使用正确的模板参数来标记您需要毫秒:

std::chrono::duration<double, std::milli> diff = end - start ; // still zero
cout << diff.count() << " ms" << endl;

如果它仍然为零,也许您的操作非常快,不到 1 毫秒即可完成?如今,对 1000 个元素的数组进行排序非常快。将其变大或重复几次。

对于 10000 个元素,它开始返回一些大于 0 的值。你的环境是什么?也许在你的情况下 high_resolution_clock 不可用...... Time measurements with High_resolution_clock not working as intended

顺便说一句,我也有 50% 的时间结果为 0。

关于c++ - 'chrono' 库输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086836/

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