示例
templatet median(std::vectorv)
template – 模板頭
告訴系統環境,定義的是乙個模板函式
typedef typename std::vector::size_type vec_sz;
告訴系統環境,整個名稱當作乙個環境來處理
如果我們在宣告中使用了由模板型別引數定義的型別,那麼就必須用關鍵字 typename 來限定這個宣告
模板例項化
例項化動作通常在鏈結期間發生,而不是在編譯期間發生
只有模板被例項化了,系統環境才能證實,模板**能被用於指定的型別,因此在鏈結期間,我們就可以發現那些看起來在編譯期間可能發生的錯誤
為了對乙個模板進行例項化,系統環境要求模板的定義+宣告必須是系統環境可以訪問的 ----> 模板的標頭檔案和原始檔都要可以訪問 ----> 模板的標頭檔案直接寫模板定義,或者在標頭檔案#include 「sourcefile.cpp」,否則會報錯
迭代器分為 5 種
(1)輸入迭代器
按乙個方向順序訪問,只能輸入
所有容器的迭代器都支援
(2)輸出迭代器
按乙個方向順序訪問,只能輸出
所有容器的迭代器都支援
(3)正向迭代器
按乙個方向順序訪問,既能輸入也能輸出
所有容器的迭代器都支援
(4)雙向迭代器
按兩個方向順序訪問,既能輸入也能輸出
所有容器的迭代器都支援
(5)隨機訪問迭代器
能有效訪問任何元素,既能輸入也能輸出
vector和string的迭代器支援
迭代器區間 [begin, end) 的原因
(1) 當區間無元素時,無法找到最後乙個元素標記終點
(2) 只需判定相等/不相等即可,無需定義小於操作
(3) 可以自然表示「區間外」的概念
標準庫提供了可以被連線到輸入流和輸出流的迭代器
(1) 用於 istream 的迭代器滿足了輸入迭代器的要求
vectorv;
// 從標準輸入中讀取整數值,並新增到v中
copy(istream_iterator(cin), istream_iterator(), back_inserter(v));
(2) 用於 ostream 的迭代器滿足了輸出迭代器的要求
vectorv;
// 輸出v的元素,元素之間用空格分隔
copy(v.begin(), v.end(), ostream_iterator(cout, " "));
使用迭代器可以提高適應性
示例
templatevoid split(const string &str, out os)
i = j;
}}
這個方法的作用是將提取一句話中的各個單詞,使用了迭代器的好處是提供了統一的介面,可以輸出到任何容器型別中:
string s = "i'm a good man";
split(s, back_inserter(word_list));
通過 back_inserter,可以獲取任何容器的目標位置,而不必關心容器本身是 vector 還是 list Chapter 8 理解需求
在專案起始階段,要建立基本的理解,包括存在的問題 誰需要解決方案 所期望解決方案的性質 與專案利益相關者和開發人員之間達成初步交流合作的效果。詢問客戶 使用者和其他人 系統或產品的目標是什麼,想要實現什麼,系統和產品如何滿足業務的要求,最終系統或產品如何用於日常工作。在起始和獲取階段獲得的資訊將在細...
Chapter 8 陣列的使用
一 c 一維陣列 語法 datatype arrayname size eg int nums 25 char array of name 30 double curr salary 35 二 陣列的長度可以是常量 const int n 50 int emp id n const int size...
泛型函式Func
泛型函式,即可以接受任何型別的通用函式 有where約束除外 例如 呼叫getcachedata,那第二個委託引數就是func,這個函式返回值也是int 呼叫getcachedata,那第二個委託引數就是func,這個函式返回值是string public static intstrtoint st...