類模板做友元
全域性函式類內實現 直接在類內宣告友元
全域性函式類外實現 需要提前讓編譯器知道全域性函式的存在
template
<
classt1,
class
t2>
class
person
//全域性函式的類內實現
friend
void printperson<
>
(personp)
;//加入空模板的引數列表,表明這是乙個模板的函式宣告
//全域性函式的類外實現
private
: t1 m_name;
t2 m_age;
}template
<
classt1,
class
t2>
class
person
;//需要提前宣告類的存在
//也需要提前宣告函式的存在
template
<
classt1,
classt2)
void
printperson
(personp)
//出入引數模板,需要加入模板
stl初識
建立資料結構和演算法的一套標準,誕生了stl
減低**復用性
stl基本概念
1.stl 標準模板庫
2.從廣義上分為容器 演算法和迭代器
3.容器和演算法之前通過迭代器進行無縫銜接
4.stl幾乎所有的**都採用了模板類或者模板函式
stl六大元件
容器 演算法 迭代器 仿函式 介面卡 空間配置器
1.容器:各種資料結構,如vector,list,deque,set,map等,用來存放資料
2.演算法:各種常用的演算法,如sort,find,copy,for_each等
3.迭代器:扮演了容器與演算法之間的膠合劑
4.仿函式:行為類似函式,可作為演算法的某種策略
5.介面卡:一種用來修飾容器或者仿函式或迭代器介面的東西
6.空間介面卡:負責空間的配置和管理
stl中的容器 演算法 迭代器
stl容器就是將運用最廣泛地一些資料結構實現出來
常用的資料結構:陣列,鍊錶,樹,棧,佇列,集合,對映表等
這些容器分為序列式容器和關聯式容器兩種
序列式容器:強調值的順序,序列式容器中的每個元素均有固定的位置
關聯式容器:二叉樹結構,各元素之前沒有嚴格的物理上的順序關係
演算法:algorithms
有限的步驟,解決邏輯或數字上的問題,這一門學科我們叫做演算法
演算法分為質變演算法和非質變演算法
質變演算法:是指運算過程中會更改區間內的元素的內容,例如拷貝,替換,刪除等等
非質變演算法:是指運算過程中不回更改區間內的元素內容,例如查詢,計數,遍歷,尋找極值等等
迭代器:容器和演算法之間的粘合劑
提供一種方法,使之能夠依序尋訪某個容器所含的各個元素,而又無需暴露該容器的內部表示方式
每個容器都有自己專屬的迭代器
stl中最常用的容器為vector,可以理解為陣列
vector存放內建資料型別
容器:vector
演算法:for_each
迭代器:vector::iterator
#include
#include
//標準演算法標頭檔案
//每個容器使用前都需要引入標頭檔案
void
myprint
(int val)
void test1
//for迴圈遍歷方式
for(vector<
int>
::iterator it = v.
begin()
; it != v.
end(
);it++)
//利用stl中提供的遍歷演算法
for_each
(v.begin()
,v.end()
,myprint)
;//底層將指標遍歷,並且解引用,輸入置函式中,返回運算結果
}
vector存放自定義資料型別
#include
class
person
string m_name;
int m_age;
}void
test1()
}//存放自定義資料型別 指標
void
test2()
}
C 學習筆記草稿版18(模板)
泛型 generic programming 即是指具有在多種資料型別上皆可操作的含義。泛型程式設計的代表作品stl是一種高效 泛型 可互動操作的軟體元件。泛型程式設計最初誕生於c 中,目的是為了實現c 的stl 標準模板庫 其語言支援機制就是模板 templates 模板的精神其實很簡單 引數化型...
學習筆記18 C語言 檔案
二進位制檔案 儲存的是資料的補碼 file fopen const char path,const char mode 功能 開啟或者建立檔案 path 檔案的路徑 mode 開啟模式 r 以唯讀許可權開啟檔案,如果該檔案不存在則開啟失敗 r 在r的基礎上,增加寫許可權 w 以只寫許可權開啟檔案,如...
python學習筆記18
棧 stack 可以用順序表實現,也可以用鍊錶實現,其原理為後進先出,操作包括 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數。佇列 queue 也是可以用順...