为什么我的函数计时器一直给出零作为输出

Why do my function timers keep giving zero as output?

本文关键字:输出 我的 函数 计时器 一直 为什么      更新时间:2023-10-16

我的时间一直是零。我需要计算遍历哈希表的总时间和平均时间。有人能告诉我我做错了什么吗?

void HashTable_chaining::SearchChainingHT(vector<string> QueryArray)
{
    clock_t start, stop, time = 0;
    int i = 0;
    while(i != QueryArray.size())
    {
        start = clock();
        find(QueryArray[i]);
        stop = clock();
        time += stop - start;
        i++;
    }
    time = (double)(time/CLOCKS_PER_SEC)*1000;
    cout << "nThe total time for Search Chaining was " << time << "nThe average time was " << time/QueryArray.size();
}

你在做整数除法:

(double)(time/CLOCKS_PER_SEC)*1000;

您希望在()内部进行强制转换:

((double)time/CLOCKS_PER_SEC)*1000;

此外,我不确定为什么你要把它分配回time,因为这是一个整数变量。如果你想以毫秒为单位,你可能想让它显式:

cout << "nThe total time for Search Chaining was " << time << "  (milliseconds)" << ...
编辑:

我最初忽略了这一点(因为水平滚动),但是在打印行末尾这里也有整数除法:

.. << "nThe average time was " << time/QueryArray.size();

你可能也想把它转换成double

神秘的回答你的问题,但我想建议不要使用clock()。如果你的编译器支持c++ 11,有一个更好的选择,#include <chrono>

#include <chrono>
void HashTable_chaining::SearchChainingHT(vector<string> QueryArray)
{
    typedef std::chrono::steady_clock Clock;
    Clock::duration total_time = Clock::duration::zero();
    int i = 0;
    while(i != QueryArray.size())
    {
        Clock::time_point start = Clock::now();
        find(QueryArray[i]);
        total_time += Clock::now() - start;
        i++;
    }
    typedef std::chrono::duration<double,std::micro> microseconds;
    typedef std::chrono::duration<double,std::nano> nanoseconds;
    cout << "nThe total time for Search Chaining was " << microseconds(total_time).count() << " microseconds.n";
    cout << "The average time was " << nanoseconds(total_time/(double)QueryArray.size()).count() << " nanoseconds.n";
}

你的问题和这个非常相似,我的答案也适用于这里(不计算一个操作,而是一百万个操作)

相关文章: