程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 對C++庫函數進行學習探索總結筆記

對C++庫函數進行學習探索總結筆記

編輯:C++入門知識

C++庫函數作為一個高效的.NET程序語言。其混合了函數語言和物件導向程序編制語言,並且完美的適用於編程、算法、技術和探索性開發,因此可以在使用的過程當中感受到趣味性和吸引力。

rand()產生“偽隨機數”的原理是:給定數x如果調用者未指定,則使用默認值),通過固定的計算公式1返回一個數y,這個數y就是所謂的偽隨機數;同時通過固定的計算公式2,修改x,這樣下次調用rand()時就會得到一個新的y。通過上面這兩步,反復調用rand()會得到一個所謂的“偽隨機數”的序列。

因為兩個計算公式是固定的,所以只要X1相同,那麼產生的序列就相同。X1成為種子,seed。
如果調用者不指定種子,C++語言的rand()會使用默認值。設置種子使用srand(unsigned int)函數,這個函數的名字的第一個字母s就是seed的意思。

因為時間的唯一性和一維性,所以可以用系統時間來作為種子。這樣可以保證每次運行時,rand()產生的序列都是不同的。在使用rand()前,以如下方式設置種子即可,
srand((unsigned int) time(0));

下面是《C Programming Language》中給出的rand()和srand()的一種實現,可能是早期C++的庫函數的實現。

  1. int rand(void) {  
  2.   nextnext = next * 1103515245 + 12345;  //修改next的值  
  3.   return (unsigned int) (next/65536) % 32768;  //得到偽隨機數在0~32768之間  
  4. }  
  5.  
  6. void srand(unsigned int seed) {  
  7.   next = seed;   //設置種子  

也就是說,隨便你拿起哪本C++書籍包括很多被人們廣泛稱為“必讀經典”的),那麼有很大的可能這本書中的內容不是你應該學的,而是你不應該學的。我之所以這麼說有兩個原因,因為一,我曾經是受害者。二,也是更實質性的原因,這些所謂的必讀經典。

充斥的是介紹C++中的陷阱和對於C++庫函數的缺陷的各種workarounds好聽一點叫Idioms慣用法)或techniques技術));又因為C++中的這類陷阱和缺陷實在數不勝數,所以就拉出了一個“長尾”;這類書籍在所有語言中都存在“C缺陷和陷阱”、“Effective Java”、“Effective C#”等等)。

  • 幾分鐘教會您使用Visual C++ 6.0設計程序
  • 永遠不會被和諧的C++代碼簡單說明
  • 深度演示C++語言的種種高安全性
  • 闡述C++單元測試說明指導說明
  • 對於C++標准庫進行說明了解

然而在C++庫函數裡面這個尾巴特別長,導致這類書數不勝數。三,這些書中列出來的缺陷和陷阱根本不區分常見程度,對於一個用本程序員來說,應該希望看到“從最常見的問題到最不常見的問題”這樣的順序來羅列內容,然而這些書裡面要麼全部混在一起。

要麼按照“資源管理、類設計、泛型”這樣的技術分類來介紹內容,這根本毫無幫助如果我看到一個章節的內容,我當然知道它講的是類設計還是資源管理,還用廢話麼?),使得一個學習者無法辨別並將最重要的時間花在最常見的問題之上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved