日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【Data】数据结构之C++程序设计(1)

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Data】数据结构之C++程序设计(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、函數與參數


1、傳值參數:

?

template<class T>T  Abc(T  a, T  b, T  c){return a+b+b*c+(a+b-c)/(a+b)+4;}


?

?

假定a,b,c是傳值參數,在函數被調用時,類型T(T可以是int,float等或自定義類型)的復制構造函數把相應的實際參數分別復制到形式參數a,b,c之中,以供函數使用;而在函數返回時,類型T的析構函數會被喚醒,以便釋放形式參數a,b,c.
缺點:大量傳值開銷大 例如: ?假定數據類型為用戶自定義的 M a t r i x,那么它的復制構造函數將負責復制其所有元素,而析構函數則負責逐個釋放每個元素(假定 Matrix 已經定義了操作符+,*和 /) 。如果我們用具有1 0 0 0個元素的Matrix 作為實際參數來調用函數 A b c,那么復制個實際參數給 a,b 和c將需要3 0 0 0次操作。當函數A b c返回時,其析構函數又需要花費額外的 3 0 0 0次操作來釋放a,b和c。
2、引用參數
 template<class T>T Abc(T& a, T& b, T& c){return a+b+b*c+(a+b-c)/(a+b)+4;}

在上面的代碼中, a,b 和c 是引用參數( reference parameter) 。如果用語句Abc (x, y, z) 來調用函數A b c,其中x、y 和z 是相同的數據類型,那么這些實際參數將被分別賦予名稱a,b 和c,因此,在函數Abc 執行期間,x、y 和z 被用來替換對應的a,b 和c。與傳值參數的情況不同,在函數被調用時,本程序并沒有復制實際參數的值,在函數返回時也沒有調用析構函數。
我們可以考察一下當a,b 和c 所對應的實際參數x,y 和z 分別是具有1 0 0 0個元素的矩陣時 的情形。由于不需要把x,y 和z 的值復制給對應的形式參數,因此我們可以節省采用傳值參數
進行參數復制時所需要的3 0 0 0次操作。
###(注意這里只是節省了復制構造函數的3000次操作,而沒有節省析構函數的3000次操作)###


3、常量引用參數
 template<class T>T Abc(const T& a, const T& b, const T& c){return a+b+b*c+(a+b-c)/(a+b)+4;}

使用關鍵字const 來指明函數不可以修改引用參數的值,這在軟件工程方面具有重要的意義。這將立即告訴用戶該函數并不會修改實際參數。 對于諸如i n t、float 和char 的簡單數據類型,當函數不會修改實際參數值的時候我們可以采用傳值參數; 對于所有其他的數據類型(包括模板類型) ,當函數不會修改實際參數值的時候可以采用常量引用參數。 ###(為什么這樣呢?)###


4、返回值 函數可以返回值,引用或常量引用。在前面的例子中,函數 Abc 返回的都是一個具體值, 在這種情況下,被返回的對象均被復制到調用(或返回)環境中。對于函數 Abc 的所有版本來說這種復制過程都是必要的,因為函數所計算出的表達式的結果被存儲在一個局部臨時變量中,當函數返回時,這個臨時變量(以及所有其他的臨時變量和傳值形式參數)所占用的空間將被釋放,其值當然也不再有效。為了避免丟失這個值,在釋放臨時變量以及傳值形式參數的空間之前,必須把這個值從臨時變量復制到調用該函數的環境中去。 如果需要返回一個引用,可以為返回類型添加一個前綴&。如:
T& X(int i, T& z)
定義了一個函數X,它返回一個引用參數Z。可以使用下面的語句返回z:
return z;
這種返回形式不會把z 的值復制到返回環境中。當函數X返回時,傳值形式參數i 以及所有局部變量所占用的空間都將被釋放。由于z 是對一個實際參數的引用,因此,它不會受影響。如果在函數名之前添加關鍵字c o n s t,那么函數將返回一個常量引用,例如:
const T& X (int i, T& z)
除了返回的結果是一個不變化的對象之外,返回一個常量引用與返回一個引用是相同的。




 

轉載于:https://www.cnblogs.com/claire-study-note/archive/2013/04/19/3065505.html

總結

以上是生活随笔為你收集整理的【Data】数据结构之C++程序设计(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。