or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
c++ template
南天門日月卦長
回想之前教過的sort
如果現在有這些陣列需要排序:
要寫好幾種sort!!
難道有幾個資料型別就要寫幾個sort嗎?
大同小異
這些sort雖然資料型態不一樣
但是程式碼的結構卻是一模一樣的
洪荒時代( < 1990 C.E. )的做法
在本小節中
各位將看到古人們怎麼解決以上的問題
因為有些難度
想跳過的人可以直接去看下一章節的內容
#define
C/C++中
#define
是很有趣的東西它可以讓你自訂一些字串來取代原本的字串
詳細請參考教學C++ 巨集
#define範例
如果你寫的程式長這樣:
電腦(編譯器)看到的其實是這樣
好幾行怎麼辦
如果有好幾行要define的話
可以利用反斜線
'\'
來進行換行編譯器視角(調整過)
小心使用
各位覺得如果我這樣寫會發生什麼事呢?
編譯器視角
要注意
#define
只是做字串取代而已利用 define 製造函數!
編譯器視角
產生不同型態的sort
利用define的性質
我們可以稍微簡化產生不同型態sort的方法
編譯器視角
好難
剛剛教的define還是太麻煩了
而且好難
進入正題
template
template(樣板,模板)
分成
Function template
又稱「通用函式」(Generic Function)
想像 Type 可以是int, double, char …
這樣只要寫一個函式就好了!
使用方法
在你想做成模板的函數前面加上template<>就行了
T會根據呼叫函數時傳入的input變成不同的形態
範例
同時有好幾個型態
同時有好幾個型態時可以用逗號
','
隔開範例
不要讓編譯器有多餘的想像
以下的code會編譯失敗
因為編譯器不知道G到底是甚麼型態
正確用法
這種情況使用函數時要用角括號
<>
告訴編譯器你想用的型態
Class template
又稱「通用類別」(Generic class)
想像 Type 可以是int, double, char …
這樣只要寫一個struct/class就好了!
使用方法
在想做成模板的struct/class前面加上template<>
使用時要用**角括號
<>
**告訴編譯器你T想用的型態範例
好幾個型態
當然和Function template一樣可以支援好幾個型態
下一步,STL!
在下一章節中,我們會介紹強大的STL
標準模板庫(Standard Template Library)
會用到大量template的概念
一定要熟悉喔