C++中的日期和时间&&随机数生成

日期和时间

C++继承了C用于日期和时间操作的结构和函数
使用时需要引用 < ctime > 头文件

这里介绍一个比较重要的自带结构体tm:

struct tm {
    int tm_sec;     //秒,正常范围从0到59,但是允许至61
    int tm_min;     //分,范围从0到59
    int tm_hour;    //小时,范围从0到23
    int tm_mday;    //一月中的第几天,范围从1到31
    int tm_mon;     //月,范围从0到11
    int tm_year;    //自1900年起的年数
    int tm_wday;    //一周中的第几天,范围从0到6
    int tm_yday;    //一年中的第几天,范围从0到365,从1月1日算起
    int tm_isdst;   //夏令时
};

下面介绍C++中关于日期时间的重要函数:

函数 描述
time_t time(time_t *time) 返回系统的动迁时间,自1970年1月1日以来经过的秒数
char *ctime(const time_t *time) 返回一个表示当地时间的字符串指针
struct tm *localtime(const timie_t *time) 返回一个指向本地时间的tm结构的指针
clock_t clock(void) 返回程序执行起,处理器时钟所使用的时间
char * asctime(const struct tm * time) 反水一个指向字符串的指针,字符串包含time所指向结构体中储存的类型
struct tm *gmtime(const time_t *time) 返回一个指向time的指针,格里尼治标准时间
time_t mktime(struct tm *time) 返回日历时间
double difftime(time_t time2,time_t time 1) 返回time1和time2之间相差的秒数
size_t strftime() 格式化日期和时间为指定格式

下面就给出一个获取当地系统日期和时间的程序,包括本地时间和标准时间:

#include<iostream>
#include<ctime>

using namespace std;

int main()
{
    //基于当前系统的当前时间
    time_t now=time(0);

    //把now转换为字符串类型
    char *dt=ctime(&now);

    cout<<"本地日期和时间: "<<dt<<endl;

    //把now转换为tm结构
    tm *gmtm=gmtime(&now);
    dt=asctime(gmtm);
    cout<<"UTC日期和时间: "<<dt<<endl;
    return 0;
}
本地日期和时间: Wed Dec 11 14:59:14 2019

UTC日期和时间: Wed Dec 11 06:59:14 2019


随机数生成

C++中有专门的随机数生成器

#include<cstdlib>

int rand();

于是我们激动地实验了一下这个函数
发现了一个严肃的问题:为什么每次“随机”出来的数都是一样的呢???

这就引发我们思考另一个很重要地问题:

计算机可以产生真正的随机数嘛?

很遗憾,不行。。。
所谓的随机数,实际上是事先存储在计算机内部的一个数表
为了使取出来的数可视为随机,我们需要给计算机一个种子

根据种子为基准以某个递推公式推算出一系列数,因为其周期长,故在一定范围内可以看成是随机数

怎么设置种子

我们需要在使用随机数生成函数之前调用一次:

void srand(unsigned int seed);

通过设置seed来产生不同的随机数,只要种子不同,那么通过rand()得到的随机数序列就是不同的;反之,如果种子是一样的,那么通过rand()得到的随机数序列就是相同的

那么我们如何选择种子就显得无比重要
一般的,我们就选择time(0)

#include<cstdlib>
#include<ctime>

srand(static_cast<unsigned int>(time(0)));
rand();

最后我们给出去[a,b]之间的随机数公式:

rand()%(b-a+1)+a
发布了941 篇原创文章 · 获赞 192 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/wu_tongtong/article/details/103396570