c 學習筆記(18)

2021-10-05 22:56:06 字數 2306 閱讀 8361

類模板做友元

全域性函式類內實現 直接在類內宣告友元

全域性函式類外實現 需要提前讓編譯器知道全域性函式的存在

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 也是可以用順...