# 實習課第六次作業 ###### tags: `NTOU CSE C++ Programming` 本次作業主題是 C++ 的模板。 > 教學文件和作業說明文件: https://hackmd.io/@kogiokka/ntou-cse-cpp-nav > 範例程式和範例專案:[Google Drive]( https://drive.google.com/drive/folders/100YvcqccLgY_27mJnubRSuPALrMAghJQ?usp=sharing) ## 參考資料 * [函式模板, OpenHome.cc](https://openhome.cc/Gossip/CppGossip/FunctionTemplate.html) * [8.13 — Function templates, LEARN C++](https://www.learncpp.com/cpp-tutorial/function-templates/) * [8.14 — Function template instantiation, LEARN C++](https://www.learncpp.com/cpp-tutorial/function-template-instantiation/) * [19.1 — Template classes, LEARN C++](https://www.learncpp.com/cpp-tutorial/template-classes/) ## 題目一、function template 用 function template 改寫函式,讓數列陣列 `array` 的類別可變化。 請改寫下列函式宣告,並撰寫函式的定義: ```cpp /** * 找出陣列中的最大值。 * * @param array 儲存一個數列的陣列 * @param size 陣列長度 * @return 陣列中的最大值 */ int max(int array[], int size); ``` 對應的範例程式: * `template_function.cpp` ### 測試案例 #### 案例1 * `int a1[] = {1, 2, 3, 5, 4};` #### 案例2 * `double a2[] = {1.2, 3.4, 5.6, 2.3, 4.5};` ## 題目二、以 template 改寫實習五的 stack (array 版本) 用 struct template 寫一個 stack(array 版本)。template 接受 2 個參數: 1. stack data type 1. stack 大小 利用 function template 定義下列函式: | 函式名稱 | 回傳值型態 | 回傳值意義 | | - | - | - | | `push` | `bool` | `true` 代表成功,`false` 代表失敗。| | `pop` | `bool` | `true` 代表成功,`false` 代表失敗。| | `isEmpty` | `bool` | `true` 代表成功,`false` 代表失敗。| | `isFull` | `bool` | `true` 代表成功,`false` 代表失敗。| | `printStack` | `void` | 無回傳值 | 對應的範例程式: * `template_function.cpp` * `template_struct.cpp` ### 測試案例 #### 案例1 * stack data type: `int` * stack 大小: `20` #### 案例2 * stack data type: `float` * stack 大小: `15` #### 案例3 依序執行下列步驟: * `isEmpty` * `isFull` * `push`: 15 data (1 - 15) * `isEmpty` * `isFull` * `printStack` * `pop`: 15 data * `isEmpty` * `isFull` * `printStack` ## 作業上傳規定 格式:`<學號>-<姓名>.zip`,例如:`11057022-江柏毅.zip` 如果你是用 Visual Studio,請刪除下列資料夾再上傳:**`.vs`**、`out`、`Debug`、`x64`。 使用其他 IDE 的同學也請刪掉建置資料夾再上傳,例如:`build`、`out`。