如何在C++中使用clock()

dat*_*ili 121 c++ benchmarking clock

我怎么叫clock()C++

例如,我想测试线性搜索在数组中查找给定元素所花费的时间.

Dol*_*lph 192

#include <iostream>
#include <cstdio>
#include <ctime>

int main() {
    std::clock_t start;
    double duration;

    start = std::clock();

    /* Your algorithm here */

    duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;

    std::cout<<"printf: "<< duration <<'\n';
}
Run Code Online (Sandbox Code Playgroud)

  • 从我在这里看到的http://www.cplusplus.com/reference/ctime/clock/,您不需要使用"std ::"表示法.只需使用"clock()" (5认同)
  • @Birger:在我工作的所有项目中,代码样式在每次std :: call之前都需要std ::. (4认同)
  • 这会在几秒钟内返回答案吗? (2认同)

Mar*_*n G 64

可以使用自C++ 11以来可移植且具有更高精度的替代解决方案std::chrono.

这是一个例子:

#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;

int main()
{
    auto t1 = Clock::now();
    auto t2 = Clock::now();
    std::cout << "Delta t2-t1: " 
              << std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
              << " nanoseconds" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在ideone.com上运行这个给了我:

Delta t2-t1: 282 nanoseconds
Run Code Online (Sandbox Code Playgroud)

  • 如果你建议使用C++ 11,你也可以编写`using Clock = std :: chrono :: high_resolution_clock;`.请参阅[type alias](http://en.cppreference.com/w/cpp/language/type_alias). (11认同)

Shi*_*rik 29

clock()返回自程序启动以来的时钟周期数.有一个相关常量,CLOCKS_PER_SEC它告诉你一秒钟内发生了多少个时钟滴答.因此,您可以测试这样的任何操作:

clock_t startTime = clock();
doSomeOperation();
clock_t endTime = clock();
clock_t clockTicksTaken = endTime - startTime;
double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;
Run Code Online (Sandbox Code Playgroud)

  • `timeInSeconds`对我来说总是来自'0.000000`.我该如何解决? (6认同)
  • @noufal也许花费的时间很短,显示为0.您可以尝试使用`long double`来获得更高的精度. (3认同)