先上代码,再按代码讲解

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<algorithm>
using namespace std;
struct shudui
{
    int w,e;
    bool operator > (const shudui q)const
    {
        return w>q.w;
    }
}m[105];
int main()
{
    int a,s,d;
    srand(time(NULL));
    for(int i=0;i<=15;++i)
    {
        m[i].w=rand();
        printf("%d ",m[i].w);
    }
    printf("\n");
    printf("*********************\n");
    for(int i=0;i<=14;++i)
        if(m[i]>m[i+1]) printf("YES ");
    else printf("NO ");
    printf("\n");
}

一、

rand函数功能为获取一个伪随机数(伪随机数的概念下面会有介绍)。

1、函数名:

rand();

2、声明:

int rand();

3、所在头文件:

stdlib.h

4、功能:

返回一个伪随机数。之所以说是伪随机数,是因为在没有其它操作下,每次执行同一个程序,调用rand得到的随机数序列是固定的(不是真正的“随机”)。

5、为了使rand的结果更“真”一些,也就是令其返回值更具有随机性(不确定性),C语言在stdlib.h中还提供了srand函数,通过该函数可以设置一个随机数种子,一般用当前时间的毫秒数来做参数。通过time(NULL)可以获取到当前时间的毫秒值(该函数位于time.h)中。

6、使用rand的流程可以总结为:

1 调用srand(time(NULL))设置随机数种子。

2 调用rand函数获取一个或一系列随机数。

需要注意的是,srand只需要在所有rand调用前,被调用一次即可,没必要调用多次。

8、以下是随机获取10个整型值并输出的例子,辅助理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int i;
     
    srand(time(NULL));//设置随机数种子。
     
    for(i = 0; i < 10; i ++)//运行10次。
        printf("%d\n"rand());//每次获取一个随机数并输出。
     
    return 0;
}

注意:不能使srand()中空着

二、

1、在结构体重载运算符时如果要用sort对结构体排序,就要有bool operator < (const shudui q)const{};注意这里是‘<’号,不能对’>‘号进行重载而用于sort

2、按照1的说法,排序要用到对'<'号重载,但是对'>' '!=' '==' '>=' '<='这些符号也可以进行重载

三、(说了这么多,也该讲讲结构体重载运算符的意义)

C++中,结构体是无法进行==,>,<,>=,<=,!=这些操作的,这也带来了很多不方便的地方,尤其是在使用STL容器的时候,如果我们可以往语句中传入结构体,一些事情将会变得很简单。
比如二分查找,binary_crearch只能对数组进行查找,如果是结构体数组的话,它会报错。但很可惜,实际编程中,大部分时候操作对象是结构体数组。

原文:https://blog.csdn.net/sunny1996/article/details/51242184/

四、(重载结构体的基本形式)(之下代码的省略部分全部是之前的代码)

1、结构体内定义cmp函数

bool mmp(const shudui x, const shudui y)      //其他人的博客上面写的是&x &y ,其实的一点是指针与对象,我比较倾向于使用对象

{

return x.w<y.w;

}

另一种中就是使用结构体重载‘<’

bool operator < (const shudui x)const(使用sort时必须有这个)     //这个关键字operator是重载的关键字,记着吧!

{

return w<x.w;

}

其次还可重载其他符号,虽然不能在sort中使用,但是可以用来比较结构体大小,而省略‘.’之后的内容

bool operator==(const shudui b) const         //这个const关键字的作用是:它表示这个函数不会修改该类的任何成员。                                                                                                                                //如果没有这个const,编译器不会允许这个运算符用于一个const对象,                                                                                                                                    //如果你认为operator<只是做个比较操作,不应该修改类的数据成员。                                                                                                                                      // 那就可以在函数后面加上一个const,编译器就不允许operator<修改类的数据成员,这样更可靠。
{
    return this->w == b.w;
}
bool operator!=(const shudui b) const
{
    return this->w != b.w;
}
bool operator<=(const shudui b) const
{
    return this->w <= b.w;
}
bool operator<(const shudui b) const
{
    return this->w < b.w;
}
bool operator>=(const shudui b) const
{
    return this->w >= b.w;
}
bool operator>(const shudui b) const
{
    return this->w > b.w;
}

其中this关键字相当于一个指针,所以在它用来指向结构体的元素时用的是'->'符号,this所指的对象就是你目前所用的对象

结构体重载运算符&srand&rand的更多相关文章

  1. C++ 结构体重载运算符

    听说这个东西有很多种写法什么的,来不及了(要退役了),先整一个之前用到的,可能用到的频率比较高的东西上来. struct node{ ll x,y; }; bool operator < (co ...

  2. srand() rand() time(0)

    标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void):从srand (seed)中指定的seed开始 ...

  3. srand rand

    #include <stdlib.h> srand( (time(0)); rand()%100;

  4. srand rand 随机函数

    srand函数是随机数发生器的初始化函数.原型:voidsrand(unsigned int seed); srand和rand()配合使用产生伪随机数序列.rand函数在产生随机数前,需要系统提供的 ...

  5. PAT A1129 Recommendation System (25 分)——set,结构体重载小于号

    Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...

  6. 水题 ZOJ 3869 Ace of Aces

    题目传送门 水题,找出出现次数最多的数字,若多个输出Nobody //#include <bits/stdc++.h> //using namespace std; #include &l ...

  7. poj 2387——单源最短路权值大于0

    因为之前做过这个题.所以这次知道这道题有重边.这次dijkstra的写法加入了优先队列的优化 优先队列 结构体从小到大顺序的两种重载运算符的方式 bool operator <(const Ti ...

  8. 最短路--dijkstra+优先队列优化模板

    不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...

  9. P3223 [HNOI2012]排队

    题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输 ...

随机推荐

  1. JS 函数节流与防抖

    前言 事件的触发权很多时候属于用户,可能会出现下列问题: 向后台发送数据,用户频繁触发,对服务器造成压力: 一些浏览器事件,如window.onresize,window.mousemove等,触发的 ...

  2. PS制作黑暗墙面上的漂亮霓虹文字

    一.用ps软件打开砖墙背景素材. 二.复制一层,混合模式改为“正片叠底”,不透明度50%. 三.新建色相/饱和度调整图层,设置如下.打造夜间的气氛. 四.新建一个空白图层,设置前景色黑色.背景色白色, ...

  3. 播放器更改语言归属地后Cnario player软件无法启动的问题

    打开系统运行,输入regedit,进入注册表编辑器. 找到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\C-nario\Player下面culture 的值,删除即可 ...

  4. Flask —— 信号(5)

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1. 内置信号 request_started = ...

  5. Tomcat服务器下载、安装、配置环境变量教程(超详细)

    请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下上 ...

  6. Monkey参数介绍

    monkey 参数 参数分类 常规类参数 事件类参数 约束类参数 调试类参数 常规类参数 常规类参数包括帮助参数和日志信息参数.帮助参数用于输出Monkey命令使用指导:日志信息参数将日志分为三个级别 ...

  7. python常用的基本操作

    打开cmd,pip list 可以查看python安装的所以第三方包

  8. Java多线程处理某个线程超时的问题

    ExecutorService exec = Executors.newFixedThreadPool(4); List<Future<Integer>> futures = ...

  9. Java NIO系列教程(一) Java NIO 概述

    <I/O模型之四:Java 浅析I/O模型> 一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数 ...

  10. Kafka实战分析(一)- 设计、部署规划及其调优

    1. Kafka概要设计 kafka在设计之初就需要考虑以下4个方面的问题: 吞吐量/延时 消息持久化 负载均衡和故障转移 伸缩性 1.1 吞吐量/延时 对于任何一个消息引擎而言,吞吐量都是至关重要的 ...