通过使用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等的更多准备工作,请参阅“完整面试准备课程” 。