結構體重載運算符&srand&rand


先上代碼,再按代碼講解

#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所指的對象就是你目前所用的對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM