目錄
目錄
面向對象:py,c艸,Java都是,但c是面向過程
特征:
對象
內斂成員函數【是啥】:
構造函數和析構函數
構造函數
復制構造函數/拷貝構造函數:
?【……】 實參與形參的傳遞方式:值傳遞,引用傳遞,地址傳遞【帶擴充】
匿名對象
析構函數
STL
? 順序容器/序列容器(Sequential Containers)
關聯容器(Associative Containers)按排序方式存儲數據,就像詞典一樣 ? 方便搜索
容器適配器(Associative adapters)(棧,隊,優先隊列)
對容器的算法
容器的成員函數
面
面向對象:py,c艸,Java都是,但c是面向過程
特征:
抽象、封裝、繼承、多態
繼承機制:
允許程序員在保持原有類特性的基礎上,進行更具體、更詳細的說明。
多態:
同一段程序能處理多種類型對象。在 C++ 中,多態有強制多態(如類型轉換)、重載多態(如函數重載、運算符重載)、類型參數化和虛函數、模板等。
對象
成員函數既可以訪問目的對象的私有成員,也可以訪問所在類的其它對象的私有成員。
內斂成員函數【是啥】:
使用內聯函數可以減少調用開銷,提高效率,但只適合相當簡單的函數。
構造函數和析構函數
構造函數:負責對象初始化。
析構函數:在對象被釋放時自動調用的函數。
構造函數與析構函數是兩類特殊的成員函數,每個類都有。
構造函數
class Clock{public:Clock(int x, int y, int z); // 構造函數
void SetTime(int h=0, int m=0, int s=0);void ShowTime();private:int hour, minute, second;};
// 構造函數的定義
Clock::Clock(int x, int y, int z){ hour=x; minute=y; second=z; }
注意:構造函數前不能加數據類型或 void!
復制構造函數/拷貝構造函數:
一類特殊的構造函數,將已有對象的指復制給其它對象
例:自定義復制構造函數:
Point::Point(Point & p) // 復制構造函數的定義
{x=p.x; y=p.y;cout << "自定義復制構造函數被調用!" << endl;}.
默認的復制構造函數何時調用?用=賦值時
int main()
{Point A(1,2);
Point B(A); // 用 A 初始化 B,自定義復制構造函數被調用
Point C=A; // 與上面語句完全一樣
Point D;
D=A; // 賦值,默認復制構造函數被調用!
cout << B.getx() << endl;return 0;}
?對象可以作為成員函數和非成員函數的參數
?【……】 實參與形參的傳遞方式:值傳遞,引用傳遞,地址傳遞【帶擴充】
匿名對象
非匿名對象構造函數缺省的話不要小括號
Clock c2; // OK,全部使用缺省值時不要加小括號!
Clock c2(); // ERROR
?匿名對象要
析構函數
? 析構函數的函數名由類名前加“~”組成
? 析構函數沒有返回值
? 析構函數在對象生存期即將結束時被自動調用
? 析構函數不接收任何參數
? 若沒有自定義析構函數,系統會自動生成一個缺省析構函數(函數體為空,如:~Point() { } )
————————————————————以上為第九講
STL
? 順序容器/序列容器(Sequential Containers)
array 數組,長度不能改變
vector 只能在最后面插入或刪除數據
deque 與 vector 類似,但允許在最前面插入或刪除數據
list 雙向鏈表,可在任意位置插入或刪除數據f
orward_list 與 list 類似,但是單向的,只能沿一個方向訪問
string 字符串,與 vector 類似,但存儲的是字符
關聯容器(Associative Containers)按排序方式存儲數據,就像詞典一樣 ? 方便搜索
set 存儲互不相同的數據,插入數據時進行排列
unordered_set 與 set 類似,但按 Hash 值排序
map 存儲“鍵-值”對,按唯一的鍵排序
unordered_map 與 map 類似,但按“鍵”的 Hash 值排序
muti:
multiset 與 set 類似,但允許有相同的數據
unordered_multiset 與 unordered_set 類似,但允許有相同的數據
multimap 與 map 類似,但不要求“鍵”唯一
unordered_multimap 與 unordered_map 類似,但不要求“鍵”唯一
容器適配器(Associative adapters)(棧,隊,優先隊列)
順序適配器和關聯適配器的變種,增加一些特殊功能
stack 棧,按后進先出(LIFO)方式存儲數據
queue 隊列,按先進先出(FIFO)方式存儲數據
priority_queue 隊列,但能保證最大元素總在最前
對容器的算法
find 查找指定的值
find_if 根據條件查找
reverse 反轉
remove_if 根據條件刪除相應的數據
transform 根據用戶給定的方法對數據進行交換
容器的成員函數
begin() 返回開始迭代器end() 返回結束迭代器
size() 返回實際元素個數
capacity() 返回當前容量
empty() 判斷是否為空
max_size() 返回元素個數的最大值
front() 返回第一個元素的引用
back() 返回最后一個元素的引用
push_back() 在序列的尾部添加一個元素
pop_back() 移出序列尾部的元素
clear() 移出所有的元素,容器大小變為 0
resize() 改變實際元素的個數
at() 使用索引訪問元素,會進行邊界檢查
assign() 用新元素替換原有內容
insert() 在指定的位置插入一個或多個元素
erase() 移出一個元素或一段元素
swap() 交換兩個容器的所有元素
data() 返回包含元素的內部數組的指針【?】
sort() 對元素進行排序
這里僅列出部分成員函數。? 并非所有容器都具有這些成員函數。? 容器不僅使用方便,而且效率也非常高,可代替數組。? 優先使用 vector 和 string
————————————————————————以上為第16講