先上代碼,再按代碼講解
#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
|
注意:不能使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所指的對象就是你目前所用的對象