📜  测量C++中函数的执行时间

📅  最后修改于: 2021-05-30 11:51:44             🧑  作者: Mango

通过使用C++ 11中引入的std :: chrono库,我们可以找出程序不同部分所花费的时间。我们已经在“如何测量C中的程序所花费的时间”中进行了讨论。C++也支持其中描述的功能。但是它们是C特有的。对于干净而健壮的C++程序,我们应该努力仅使用C++特定的语言构造。

std :: chrono有两个不同的对象-时间点和持续时间。顾名思义,时间点代表一个时间点,而持续时间则代表一个时间间隔或时间跨度。 C++库允许我们减去两个时间点,以获取两者之间传递的时间间隔。使用提供的方法,我们还可以将此持续时间转换为适当的单位。

std :: chrono为我们提供了三个精度各异的时钟。 high_resolution_clock是最准确的,因此可用于测量执行时间。

步骤1:在调用函数之前获取时间点

#include 
using namespace std::chrono;
  
// Use auto keyword to avoid typing long
// type definitions to get the timepoint
// at this instant use function now()
auto start = high_resolution_clock::now();

步骤2:在调用函数后获取时间点

#include 
using namespace std::chrono;
  
// After function call
auto stop = high_resolution_clock::now();

步骤3:获取时间点上的差异并将其转换为所需的单位

// Subtract stop and start timepoints and
// cast it to required unit. Predefined units
// are nanoseconds, microseconds, milliseconds,
// seconds, minutes, hours. Use duration_cast()
// function.
auto duration = duration_cast(stop - start);
  
// To get the value of duration use the count()
// member function on the duration object
cout << duration.count() << endl;

下面给出了演示该过程的完整C++程序。我们用一些随机数填充一个向量,并测量sort()函数对该向量进行排序所花费的时间。

// C++ program to find out execution time of
// of functions
#include 
#include 
#include 
#include
using namespace std;
using namespace std::chrono;
  
// For demonstration purpose, we will fill up
// a vector with random integers and then sort
// them using sort function. We fill record
// and print the time required by sort function
int main()
{
  
    vector values(10000);
  
    // Generate Random values
    auto f = []() -> int { return rand() % 10000; };
  
    // Fill up the vector
    generate(values.begin(), values.end(), f);
  
    // Get starting timepoint
    auto start = high_resolution_clock::now();
  
    // Call the function, here sort()
    sort(values.begin(), values.end());
  
    // Get ending timepoint
    auto stop = high_resolution_clock::now();
  
    // Get duration. Substart timepoints to 
    // get durarion. To cast it to proper unit
    // use duration cast method
    auto duration = duration_cast(stop - start);
  
    cout << "Time taken by function: "
         << duration.count() << " microseconds" << endl;
  
    return 0;
}

输出:(取决于机器)

Time taken by function: 3062 microseconds

参考
https://www.geeksforgeeks.org/chrono-in-c/

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”