讀書筆記之:C++ Primer (第4版)及習題(ch01-ch11) [++++] 第2章 數據和基本類型 1. 整型 2. 習題:左值和右值 3. C++關鍵字/保留字和操作符替代值 4. 聲明,定義, 初始化和賦值是不同的概念。 聲明是說明一個變數的存在,不會為變數進行記憶體空間的分配。 定義 ...
讀書筆記之:C++ Primer (第4版)及習題(ch01-ch11) [++++]
第2章 數據和基本類型
1. 整型
2. 習題:左值和右值
3. C++關鍵字/保留字和操作符替代值
4. 聲明,定義, 初始化和賦值是不同的概念。
聲明是說明一個變數的存在,不會為變數進行記憶體空間的分配。
定義是說明一個變數的存在,同時為這個變數分配對應的記憶體空間。
初始化就是在進行變數定義的時候在所分配的記憶體空間中同時填入有意義的值。如果不進行初始化的話,變數雖然有對應的記憶體空間,但是記憶體空間中對應 的內容卻是無意義的。
賦值是為已經存在的變數的改寫值,也就是重新擦寫變數記憶體空間的數據,填入新的數據。
C++中因為有類的存在所以,對初始化進行了更細的劃分,分為直接初始化和複製初始化。
C++對於變數的初始化規定了一些規則:內置類型和類類型是不一樣的,內置類型在函數體外自動初始化為0,函數體內不進行初始化。而類類型的話是調用類的預設構造函數。
5. const變數/對象的初始化
6. 引用聲明後就必須初始化,並且一經初始化就不能再改變。
不能使用const變數來初始化非const引用。
7. 定義變數和定義類成員變數是不一樣的。
第3章 標準庫類型
1.string對象的讀寫
下麵的代碼可以從輸入不斷的讀入單詞。
int main(){string word;
while(cin>>word)
cout<<word<<endl;
}
上面的程式的大致輸出是這樣的:
如果從標準輸入讀入的話,產生的結果是這樣的:每次按回車鍵之後才產生輸出。主要cin是從緩衝區讀取輸入的,只有每次按下回車鍵的時候才將緩衝區進行刷新。
如果是使用管道來進行輸入的話,結果是這樣的
可以看到單詞是通過空白符(空格,回車,製表符)進行劃分的。而結束是根據文件結束符進行判斷的。
getline的使用方法如下:
int main(){string line;
while(getline(cin,line))
cout<<line<<endl;
}
8. bitset類型
第4章 數組和指針
1. 指針與引用
2. 動態數組的初始化
第5章 表達式
1. C++中前置操作符還是後置操作符
2. 動態創建對象時的預設初始化。
3. 刪除const對象,使用delete來收回記憶體
4. C++中的類型轉換
第6章 語句
1. 標準庫異常
第7章 函數
1. 形參與實參:形參是變數,實參是表達式。
2. const形參
對於C++內置類型,由於採用的是值複製的方式,所以加const與否都是無影響的。
如果形參是引用的形式,採用const和非const的情況就不一樣了。
3. const成員函數
4. 構造函數
預設構造函數,構造函數的初始化列表
5. 實參類型的轉換
C++支持函數重載,所以就存在函數的匹配問題。在進行函數匹配的過程中,如果沒有找到最佳匹配的話,需要進行實參類型的轉換來尋找次優的匹配。
6. const參數與重載
7. 習題,枚舉類型對象只能用同一枚舉類型的另一對象或一個枚舉成員進行初始化。
8. const引用形參
下麵的函數是錯誤的
void swap(const int &a,const int &b){
int tmp=a;
a=b;
b=a;
}
const在此處的用法就是防止對傳入形參的修改。
下麵的函數也是錯誤的:
void swap(const int *a,const int *b){
int tmp=*a;
*a=*b;
*b=tmp;
}
const的作用就是說明指針指向的地方是只讀的,不允許修改。
9.C++中函數指針的不同寫法
函數重載存在時,必須對函數指針進行精確的匹配
第8章 標準IO庫
1. IO流類的繼承關係以及所在的頭文件
2. IO對象不可複製或賦值
3. C++中的IO流的最大的特點就是有流的狀態,可以通過判斷流的狀態
4. 文件流對象的使用
第9章 順序容器
1. 順序容器中定義的類型
2. swap操作節省刪除元素的成本
3. vector容器的自增長
5. string中的substr,append和replace操作
6. string類型的操作操作,這個其實挺重要的,可以藉助這個類find操作完成很多工作。
下麵是string幾個查找函數的例子:
View Code View Code下麵的程式不嚴格的事這個習題的程式,該程式只是找到一個個的單詞。
View Code第10章 關聯容器
1.STL中的關聯容器
在C++11中添加了unordered_map,unordered_set,unordered_multimap,unordered_multiset. 這四個容器其實就是常見的hash_map,hash_set, hash_multimap, hash_multiset
2. pair類型
3. map容器定義的類型
對map迭代器進行解引用得到的是pair類型
4. map下標訪問的特殊之處
5. map的insert操作
統計單詞數目的一個簡單程式:
View Code6. map中的查找操作:count和find函數
7. 一個簡單的單詞轉換程式
View Code運行結果如下:
8. map,set,list差異
9. set的定義與使用
10. 利用set來排除一些常見的單詞,這樣在統計的時候就避開了常見的單詞
View Code11. 容器的綜合應用:文本查詢程式
View Code以該程式源文件為輸入的話,有下麵的輸出:
12. 常見常用容器總結
第11章 泛型演算法
1. 插入迭代器
2. iostream迭代器
3. 使用copy演算法將文件寫入到輸出:
View Code4. 三種迭代器
5. 迭代器分類