/*
2000/02 起,我在元智大學,每學年第二學期開一門課程。
目前是「泛型程式設計(Generic Programming)」,以下是相關資料。

許多人來信詢問是否可以旁聽。是的,我的學校課程永遠歡迎旁聽。
但如關係到學生權益(例如座位),當以修課者優先。如果修課者
上課狀態不佳(例如時常遲到),會被我剔除原本應享的權益。


科目名稱(中文):泛型程式設計
科目名稱(英文):Generic Programming (and C++ STL)
授課時間:3 小時/每週(選修)
時間:每週四(或週三,視排課情況而定)18:30pm ~ 21:20pm
地點:工程一館(資訊系館),教室視排課情況而定。
※確實之時間地點,請詢問元智大學資訊工程系辦公室 03-4638800-369

1. 課程目標
   給予學生泛型程式設計(generic programming)的堅實訓練,
   嘗試建立可復用(reusable)之軟體元件,並學習使用 C++ STL。

2. 先備基礎:
   C++ programming language

3. 課程大綱
   o. Generic Programming Overview(泛型程式設計概觀)
   o. Basic1: C++ Function Template
   o. Basic2: C++ Class Template
   o. Basic3: C++ Operator Overloading
   o. STL Overview(STL 概觀)
   o. STL Iterators(泛型指標)
   o. STL Containers(泛型容器)
   o. STL Generic Algorithms(泛型演算法)
   o. STL Function Objects(函式物件)
   o. STL Adaptors(泛型配接器)

4. 上課用書
   《泛型技術》侯捷著/眳p(預計 2001 年初出版)

    如果以上書籍來不及完成,則 2001/02 開學時將採用:
      《C++ Primer 中文版》侯捷譯/眳p(此為 2000/02 採用之書籍)
        chap06: Abstract Container Types
        chap10: Function Templates
        chap12: The Generic Algorithms
        chap15: Overloaded Operators
        chap16: Class Tempaltes
        Appendix: The Generic Algorithm Alphabetically
      並輔以五篇文章做為上課講義。可由本站下載,見左視窗「STL系列文章 (PDF)」

5. 參考書
   o. Generic Programming and the STL (by Austern, A.W. 1998)
      《泛型程式設計與 STL》侯捷,黃俊堯合譯/眳p/2000
   o. The C++ Standard Library (by Josuttis, A.W. 1999)
      《C++ 標準程式庫》侯捷譯/眳p/2001

6. 教學方式
   以教本、講義、投影片、程式實例,進行教學

7. 評分方式
   o. 無期中考
   o. 平時成績佔 20%
   o. 期末作業佔 80%
   o. 期末作業 4~6 人一組。

● 2001 期末作業題目:
   求 n * n 方陣中,(1)橫、(2)縱、(3)正對角、(4)反對角 皆無相同元素之排列。

   例 5 * 5 方陣,以下為一組解:

                  0 1 2 3 4
                  2 3 4 0 1
                  4 0 1 2 3
                  1 2 3 4 0
                  3 4 0 1 2

   提示:程式應具彈性,可接受 user 輸入方陣邊長 n。
   提示:程式面對 n= 4, 5, 6 之方陣,求解速度應「至少令人可接受」。
   提示:n= 7 方陣,其解答個數已達天文數字。
   提示:試評估解答個數與 n 之間有無任何規律關係。
   提示:儘量運用 STL,你的 programming 工作會減輕非常非常多。
         o. 資料結構可用 vectors
         o. 演算法可用 next_permutation(), for_each,
         o. 輔助工具可用 function objects, iterator adaptors.
         o. 螢幕輸入/輸出可用 iostream
         o. 檔案輸出可用 ofstream
         o. 資料格式化可用 ostringstream
         o. 時間計算可用 struct tm, time_t, time(), localtime()

   提交:(1) 作業報告 (2) 程式源碼。
   評比:比執行速度,比你的推論,比 STL 之運用程度,比監控設施,
         比運轉記錄(loging),比文件內容。

● 2002 期末作業題目:
   not yet
*/