计时库用于处理日期和时间。该库旨在处理以下事实:计时器和时钟在不同的系统上可能会有所不同,因此会随着时间的推移在精度方面进行改进。 chrono的独特之处在于,它通过将持续时间和时间点(“ timepoint”)与特定时钟分开来提供了一种精确中立的概念。
chrono是标题的名称,也是子命名空间的名称:该标题中的所有元素(common_type特殊化除外)不是直接在std名称空间下定义(像大多数标准库一样),而是在std ::下定义: chrono名称空间。
此标头中的元素处理时间。这主要通过三个概念来完成:
期间
持续时间对象通过分钟,两小时或十毫秒之类的时间表示时间跨度。例如,“ 42秒”可以用1秒时间单位的42个滴答声表示的持续时间来表示。
// C++ program to illustrate the utility
// function duration::count
#include
#include
int main ()
{
using namespace std::chrono;
// std::chrono::milliseconds is an
// instantiation of std::chrono::duration:- 1 second
milliseconds mil(1000);
mil = mil*60;
std::cout << "duration (in periods): ";
std::cout << mil.count() << " milliseconds.\n";
std::cout << "duration (in seconds): ";
std::cout << (mil.count() * milliseconds::period::num /
milliseconds::period::den);
std::cout << " seconds.\n";
return 0;
}
输出:
duration (in periods): 60000 milliseconds.
duration (in seconds): 60 seconds.
钟
时钟由起点(或纪元)和滴答度组成。例如,一个时钟可能具有一个1996年2月22日的纪元,并且每秒钟计时。 C++定义了三种时钟类型:
- system_clock-这是根据系统的当前时间(我们在计算机工具栏上看到的常规时钟)。它写为-std :: chrono :: system_clock
- stable_clock-这是一个永远不会调整的单调时钟,它以统一的速率运行。它写为-std :: chrono :: steady_clock
- high_resolution_clock –它提供最小的滴答周期。它写为std :: chrono :: high_resolution_clock
时间点
time_point对象表示相对于时钟纪元的时间点。在内部,对象存储一个持续时间类型的对象,并将Clock类型用作其纪元的引用。
// C++ program to illustrate time point
// and system clock functions
#include
#include
#include
// Function to calculate
// Fibonacci series
long fibonacci(unsigned n)
{
if (n < 2) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
int main()
{
// Using time point and system_clock
std::chrono::time_point start, end;
start = std::chrono::system_clock::now();
std::cout << "f(42) = " << fibonacci(42) << '\n';
end = std::chrono::system_clock::now();
std::chrono::duration elapsed_seconds = end - start;
std::time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout << "finished computation at " << std::ctime(&end_time)
<< "elapsed time: " << elapsed_seconds.count() << "s\n";
}
输出:
f(42) = 267914296
finished computation at Wed Jan 4 05:13:48 2017
elapsed time: 2.14538s
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。