时间段
#include <chrono>
// duration TYPEDEFS
typedef duration<long long, nano> nanoseconds; //纳秒
typedef duration<long long, micro> microseconds; //微秒
typedef duration<long long, milli> milliseconds; //毫秒
typedef duration<long long> seconds; //秒
typedef duration<int, ratio<60> > minutes; //分钟
typedef duration<int, ratio<3600> > hours; //小时
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
int main()
{
chrono::duration<long long,ratio<3600> > dur;//构造对象
chrono::hours h(1);
this_thread::sleep_for(chrono::seconds(3));//延迟3秒
chrono::seconds s(1000);
chrono::seconds res = h - s;//时间段运算
cout << res.count() << endl;//打印间隔
return 0;
}
时钟
1.system_clock:获取系统时间,需要转换成time_t形式显示出来
2.steady_clock:计时
3.high_resolution_clock:高精度时钟
4.时钟类共用的一些函数
(1)static time_point now() 获取当前时间点
(2)static time64_t to_time_t(const time_point x);
(3)time_point from_time_t(time_t x);
#include <chrono>
#include <iostream>
#include <thread>
#include <iomanip> //put_time()
using namespace std;
int main()
{
//system_clock
chrono::system_clock::time_point res = chrono::system_clock::now();//获取当前时间点
time_t tt = chrono::system_clock::to_time_t(res);//转换为可以显示的时间戳
cout << ctime(&tt) ;//转换为正确时间字符串打印出来
struct std::tm* p = localtime(&tt);
cout << "格式化时间:" << put_time(p,"%c") << endl;
cout << res.time_since_epoch().count() << endl;//打印时间戳
chrono::system_clock::time_point end = chrono::system_clock::now();//获取当前时间点
auto dur = end - res;//获取时间间隔
cout << dur.count() << endl;//纳秒
//steady_clock
chrono::steady_clock::time_point start = chrono::steady_clock::now();
this_thread::sleep_for(chrono::seconds(1));
chrono::steady_clock::time_point endt = chrono::steady_clock::now();
chrono::duration<double,ratio<1>> timetemp = endt - start;//转换为秒
cout << timetemp.count() << endl;
//high_resolution_clock
chrono::high_resolution_clock::time_point startime = chrono::high_resolution_clock::now();
this_thread::sleep_for(chrono::seconds(1));
chrono::high_resolution_clock::time_point endtime = chrono::high_resolution_clock::now();
chrono::duration<double, ratio<1>> time = endtime - startime;//转换为秒
cout << time.count() << endl;
return 0;
}
时间转换
1.duration_cast不属于duration类(只有浮点时长和整数时长可以直接隐式转换)
2.time_point_cast不属于time_point(存在精度丢失使用)
#include <chrono>
#include <iostream>
#include <thread>
using namespace std;
//辅助模板打印函数
template <class Dur>
void print_time(chrono::time_point<chrono::high_resolution_clock, Dur> time_point)
{
cout << time_point.time_since_epoch().count() << endl;
}
int main()
{
//duration_cast
chrono::high_resolution_clock::time_point start = chrono::high_resolution_clock::now();
this_thread::sleep_for(chrono::seconds(1));
auto end = chrono::high_resolution_clock::now();
chrono::milliseconds dtime = chrono::duration_cast<chrono::milliseconds>(end - start);
cout << dtime.count() << endl;;
chrono::duration<double, ratio<1, 1000>> dtime1 = end - start;//浮点型隐式转换
cout << dtime1.count() << endl;
//time_point_cast
using TIMEMS = chrono::time_point<chrono::high_resolution_clock, chrono::milliseconds>;
TIMEMS time_point_sec(chrono::seconds(6));
TIMEMS time_point_ms(time_point_sec);//秒到毫秒
using TIMESEC = chrono::time_point<chrono::high_resolution_clock, chrono::seconds>;
TIMEMS time_ms(chrono::milliseconds(6677));
TIMESEC time_sec = chrono::time_point_cast<chrono::seconds>(time_ms);//毫秒到秒 6
return 0;
}
随机种子序列:seed_seq
类似srand函数,用来设置范围
size():检测种子个数
generate()
param():做元素的拷贝
seed_seq seed = { 1, 3, 5, 7, 9, 2, 4, 6, 8 };
cout << seed.size() << endl;//9
array<int, 9> data;
seed.param(data.begin());
引擎适配器
shuffle_order_engine:乱序随机数引擎适配器
independent_bits_engine:独立位随机数引擎适配器
discard_block_engine:丢弃快随机数引擎适配器
default_random_engine:默认随机数引擎适配器
#include <random>
#include <iostream>
#include <chrono>
#include <functional>
using namespace std;
int main()
{
//1.生成随机数
default_random_engine e;
e.seed((size_t)chrono::high_resolution_clock::now().time_since_epoch().count());
//e.seed((size_t)time(NULL));
cout << e.max() << endl;//最大
cout << e.min() << endl;//最小
//2.分布方式和引擎方式
uniform_int_distribution<int> dur(1, 6);//只生成1—6的随机数
cout << dur(e) << endl;
auto randb = bind(dur, e);
for (int i = 0; i < 5;i++)
cout << (randb() + randb() + randb()) << endl;//重复生成随机数
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)