1. C語言中的 scanf() 函數ios
該函數包含在頭文件 <stdio.h> 或者 <cstdio> (在C++中使用時)函數
函數的返回值指的是this
所輸入的數據與格式字符串匹配的次數。spa
意思就是該函數返回已成功賦值的數據項數,出錯時返回 EOF (End_of_File,是一個預約義常量,表示文件末尾,值爲-1)指針
簡單示例:code
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int a, b; 6 int input = scanf("%d %d", &a, &b); 7 printf("input = %d\n", input); 8 9 return 0; 10 }
此時輸入 1 2 對象
獲得輸出 input = 2 blog
上述結果表示正確匹配,若出現錯誤,如輸入 1 a 作用域
第二個值匹配失敗,整型變量b沒法獲得字符‘a’,依舊是一個未賦值前不肯定的值,則此時輸出結果爲 input = 1 字符串
總之,咱們可經過函數scanf( )返回值,來檢測輸入格式的正確性。
2. C++類與對象
2.1 問題:咱們須要將一個類的全部實例都保存在一個容器中,同時又不須要類的使用者進行其餘的操做,該如何實現?
方法:在類中定義一個static類型的容器做爲類的成員變量,構造對象時將對象的地址添加到容器中,析構時再將其從容器中刪除。
1 #include <iostream> 2 #include <list> 3 #include <algorithm> 4 5 using namespace std; 6 7 class MyClass { 8 protected: 9 int value_; 10 public: 11 static list<MyClass*> instances_; 12 MyClass(int val); 13 ~MyClass(); 14 static void showList(); 15 }; 16 17 list<MyClass*> MyClass::instances_; 18 19 MyClass::MyClass(int val) { 20 instances_.push_back(this); 21 value_ = val; 22 } 23 24 MyClass::~MyClass() { 25 list<MyClass*>::iterator p = 26 find(instances_.begin(), instances_.end(), this); 27 if (p != instances_.end()) 28 instances_.erase(p); 29 } 30 31 void MyClass::showList() { 32 for (list<MyClass*>::iterator p = instances_.begin(); 33 p != instances_.end(); ++p) 34 cout << (*p)->value_ << endl; 35 } 36 37 int main(int argc, char **argv) { 38 MyClass a(1); 39 MyClass b(10); 40 MyClass c(100); 41 MyClass::showList(); // 輸出的結果爲1,10,100 42 return 0; 43 }
3. 生成隨機數序列
3.1 C語言中 rand() 函數用來產生隨機數,但這不是真正意義上的隨機數,是僞隨機數。
它是以一個數(一般稱爲種子)爲基準推算出來的一系列數,當這系列數很大時,就會服從正態公佈,從而至關於產生了隨機數。
當計算機正常開機後,這個種子的值是定了的,除非你破壞系統,才能改變這個種子的值。
C++提供了 std::srand() 函數,其原型是 void srand( int a) ,利用 srand((unsigned int) (time(NULL)) 是一種產生不可預見的隨機序列的方法,由於每一次運行程序的時間是不一樣的。
3.2 以當前時間爲參數重置隨機數種子
若是沒調用 srand() ,你會發現你每次運行程序, rand() 獲得的序列值是不變的,而後 srand 裏參數相同時 rand() 獲得的序列也將相同。
std::srand(time(0)) 的做用就是讓獲得的序列看上去更貼近隨機的概念。
4. Lambda表達式
爲什麼使用 Lambda ?
4.1 距離
不少人認爲,讓定義位於使用的附近頗有用。這樣就無需翻閱不少源代碼,以瞭解函數。修改代碼也很簡單。
Lambda 表達式是不錯的選擇,而函數是很差的選擇,由於不能內部定義其餘函數,定義可能離使用的地方很遠。函數符是個不錯的選擇,能夠在函數內部定義類(包含函數符類)。
4.2 簡潔
函數符代碼要比l Lambda 代碼更加繁瑣,函數和 Lambda 的簡潔程度至關。
4.3 效率
三種方法相對效率取決於編譯器的內聯。函數指針阻止了內聯,由於編譯器傳統上不會內聯其餘地址被獲取的函數,由於函數地址的概念意味着非內聯函數。而函數符和 Lambda 一般不會阻止內聯。
4.4 功能
Lambda 表達式可訪問做用域內的任何動態變量,能夠採用取值、引用的形式進行捕獲。
未完待續...