S SmartDocs

编程语言

Python、C、C++、Java、JavaScript、TypeScript、Go、R 与 Haskell 教程,从入门语法到高级技巧。

C++ 更新于 2026-06-15

Ch13:STL 容器

讀完本章後,你應該能夠:: 說明 STL 的三大支柱(容器、迭代器、演算法)如何協作,以及為何如此設計 理解每種容器的 底層結構、記憶體佈局與時間複雜度(Big-O) 熟練使用 序列容器:vector、deque、list、forward_list、array 熟練使用 關聯容器:map、multimap、set、multiset(紅黑樹、有序) 熟練使用 無序容器:unordered_map/unordered_set(雜湊表、負載因

阅读文章 →
C++ 更新于 2026-06-15

Ch14 — STL 演算法與迭代器(Algorithms & Iterators)

迭代器是連接容器與演算法的橋樑。STL 演算法透過迭代器操作資料,讓你無需了解容器的內部實作,就能對資料進行排序、搜尋、轉換等操作。學會「用演算法表達意圖」而非「手寫迴圈」,是寫出現代、正確、高效 C++ 的關鍵一步。

阅读文章 →
C++ 更新于 2026-06-15

Ch15 — Lambda 與函式物件(Lambda & Function Objects)

函式物件(functor)與 Lambda 表達式是 C++ 中實現「可呼叫物件(callable)」的兩大方式。它們讓你能把「行為」當作參數傳遞、儲存、組合,是使用 STL 演算法、設計回呼(callback)與策略模式不可或缺的工具。掌握 Lambda,等於拿到了現代 C++ 的萬用鑰匙。

阅读文章 →
C++ 更新于 2026-06-15

Ch16 — 記憶體管理與智慧指標(Memory Management & Smart Pointers)

手動記憶體管理是 C++ 最強大也最危險的能力。現代 C++ 透過智慧指標(smart pointers)把資源管理自動化,消除記憶體洩漏、懸空指標、重複刪除等一整類最難除錯的錯誤。本章的核心訊息只有一句話:在現代 C++ 中,你幾乎不該再手寫 new 與 delete。

阅读文章 →
C++ 更新于 2026-06-15

Ch17 — 移動語意(Move Semantics)

移動語意是 C++11 最重要的革新之一。它讓程式能「搬走」資源而非「複製」,把處理大型物件(容器、字串、檔案緩衝)的成本從 O(n) 降到 O(1)。理解移動語意,是理解現代 C++ 為什麼又快又安全的關鍵。

阅读文章 →
C++ 更新于 2026-06-15

Ch18 — 例外處理(Exception Handling)

例外處理提供一種結構化的錯誤處理機制:把「正常邏輯」與「錯誤處理」分離,讓錯誤無法被默默忽略,並與 RAII 結合保證資源在任何路徑下都被釋放。本章不只教你語法,更教你何時該用、何時不該用例外。

阅读文章 →
C++ 更新于 2026-06-15

Ch19:命名空間與多檔案專案

想像一個沒有命名空間的世界。你的專案用了兩個第三方函式庫:一個繪圖庫提供 Color、draw(),一個遊戲引擎也提供 Color、draw()。當你同時 #include 兩者,連結器(甚至編譯器)會抱怨「重複定義」(multiple definition / redefinition)——這就是名稱衝突(name collision)。

阅读文章 →
C++ 更新于 2026-06-15

Ch20:C++17 特性精選

C++17 不是革命性的大改版,而是一系列「讓日常程式碼更安全、更簡潔」的實用改進。它解決了許多長年以來只能靠慣用法(idiom)或樣板雜技繞過的痛點:: 多值回傳不必再記 std:get<0>、.first/.second → 結構化綁定 「可能沒有值」不必再用魔術數字 -1、nullptr 表示 → std:optional 型別安全的「多選一」不必再用 C 風格 union + tag → std:variant 函式收字串參數不

阅读文章 →
C++ 更新于 2026-06-15

第二十一章:型別推導(Type Deduction)

讀完本章,你將能夠:: 理解 auto 的三種推導情境(by value、auto&、auto&&)及其與 const、參考的交互 看穿 auto 與大括號初始化(std:initializer_list)的陷阱 掌握 decltype 的推導規則,並區分 decltype(name) 與 decltype(expression) 的關鍵差異 學會使用 decltype(auto) 進行回傳型別的完美轉發 理解尾端回傳型別(traili

阅读文章 →
C++ 更新于 2026-06-15

第二十二章:constexpr 與編譯期計算

讀完本章,你將能夠:: 清楚區分 const(執行期常數)與 constexpr(編譯期常數) 宣告並使用 constexpr 變數、函式與建構子(literal type) 了解 C++11 → C++14 → C++17 對 constexpr 函式逐步放寬的限制 判斷 constexpr 函式何時在編譯期執行、何時退化為執行期函式 使用 if constexpr(C++17)做編譯期分支與死碼消除(dead code elimin

阅读文章 →
C++ 更新于 2026-06-15

第二十三章:多執行緒程式設計(Multithreading)

讀完本章並完成練習後,你應該能夠:: 解釋並行(concurrency)與平行(parallelism)的差異,並判斷何時值得引入多執行緒 使用 std:thread 以函式、lambda、成員函式、函式物件建立執行緒,並正確地 join / detach 理解 joinable 狀態,避免「可 joinable 的執行緒被銷毀」導致 std:terminate() 正確地以值、std:ref、std:move 傳遞參數給執行緒 說明資

阅读文章 →
C++ 更新于 2026-06-15

第二十四章:設計模式與最佳實踐

讀完本章並完成練習後,你應該能夠:: 解釋 SOLID 五大原則,並用 C++ 範例說明每一條如何改善設計 區分創建型、結構型、行為型三大類設計模式 實作執行緒安全的 Singleton(Meyers' Singleton),並說出它的批評與替代方案(依賴注入) 實作 Observer 模式(push/pull、傳統繼承版與 std:function 現代版) 實作 Strategy 模式(類別繼承版與 std:function 版),

阅读文章 →
C++ 更新于 2026-08-03

完整 C++ 教材 — 由淺到深

以 C++17 標準為主的繁體中文完整教材,從零基礎到進階主題。 > 每個章節包含 Markdown 概念說明 + 可直接編譯執行的 .cpp 範例程式。

阅读文章 →
Go 更新于 2026-04-18

Baasid backend project v1.1

用戶於登入系統請求成功後,Server 產生 JWT token 回傳給客戶端,且之後的CRUD Request 都需帶入 Token 取得 Response Data

阅读文章 →
Imperative Languages 更新于 2026-05-05

2nd Revision (2021) — 題目說明與詳解

課程:5CCS2PLD Programming Language Design Paradigms,King's College London > 講者:Maribel Fernández & Odinaldo Rodrigues > 題目來源:2nd_revision_2021.pdf(共 4 題) > 官方參考:2nd_revision_2021_answers.pdf(sketch of sample solutions) > >

阅读文章 →
Imperative Languages 更新于 2026-05-06

Imperative Languages — Formal Description using Abstract Machines

課程: 5CCS2PLD Programming Language Design Paradigms > 學校: Department of Informatics, King's College London > 主題: 以抽象機器(Abstract Machine)給予 SIMP 語言形式化的操作語義 > 本檔目的: 以 PDF 投影片內容為主幹,補完投影片未完整展開的推導、加入網路教材中常見的補充說明,並附高密度模擬考題與詳解。

阅读文章 →
Imperative Languages 更新于 2026-04-23

結構化操作語意學 (Structural Operational Semantics, SOS)

課程來源:King's College London — Imperative Languages, Maribel Fernández > 核心教科書:Glynn Winskel, The Formal Semantics of Programming Languages (Chapter 2 & 4) > 經典原始論文:Gordon D. Plotkin, A Structural Approach to Operational S

阅读文章 →
Imperative Languages 更新于 2026-04-28

Week 5 Revision — 題目說明與詳解

課程: 5CCS2PLD Programming Language Design Paradigms(Maribel Fernández) 來源: Week 5 revision tasks(歷屆試題精選) 本文依題目 PDF 與參考答案 PDF 整理,並補上較完整的推導與概念說明。

阅读文章 →
Imperative Languages 更新于 2026-04-30

函數式程式設計:型別與語意 (Types and Semantics)

課程來源:5CCS2PLD — Programming Language Design Paradigms,King's College London > 講者:Dr. Odinaldo Rodrigues / Prof. Maribel Fernández > 對應講義:Week7_TYPES_AND_SEMANTICS.pdf(共 84 頁,4 小節:7.1–7.4) > > 本份教材以「先理解、再形式化、再實作」的順序,把講義中的

阅读文章 →
Imperative Languages 更新于 2026-05-06

Exam May 2024 — 題目說明與詳解

課程:5CCS2PLD Programming Language Design Paradigms,King's College London > 講者:Maribel Fernández & Odinaldo Rodrigues > 題目來源:exam2024.pdf(共 2 大題、10+ 子題,本身附帶官方 sample answer) > > 本文件依考題重新整理,補上完整概念複習、推導步驟、AST 圖、SLD-tree 與計算過

阅读文章 →
Imperative Languages 更新于 2026-05-06

Exam May 2025 — 題目說明與詳解

課程:5CCS2PLD Programming Language Design Paradigms,King's College London > 講者:Maribel Fernández & Odinaldo Rodrigues > 題目來源:exam2025.pdf(共 2 大題、9 子題;附官方 sample answer) > > 本文件依考題重新整理,補上完整概念複習、AST 圖、推導樹與 SLD-tree、Prolog 追蹤

阅读文章 →
Java 更新于 2026-08-15

Java 程式設計完整學習教材

一套三冊的繁體中文 Java 教材,內容從零基礎入門到資深工程師所需的高階主題。 全部章節以 LaTeX 撰寫,使用 XeLaTeX 編譯成高品質 PDF;所有範例程式皆附 詳細的繁體中文註解,方便自學。

阅读文章 →
Java 更新于 2026-08-15

Lambda 與函數式程式設計

從本章開始,我們正式邁入資深工程師的領域。你在初級與中級篇已經熟悉物件導向的 思維:把資料與行為封裝進物件。而函數式程式設計提供了另一種互補的視角——把 「行為」本身當成值來傳遞。Java 8 引入的 Lambda 運算式與函數式介面,讓這種 風格得以在強型別的語言中優雅落地,也是後續 Stream API(第 2 章)與 CompletableFuture(第 4 章)的語法基礎。

阅读文章 →
Java 更新于 2026-08-14

Stream API

上一章我們學會把「行為」當成值傳遞。Stream API 正是這個能力的舞台:它讓我們用 宣告式的方式描述「要對資料做什麼」,而不必陷入「怎麼一步步做」的迴圈細節。 Stream 不是一種新的資料結構,而是一條「資料處理的管線」——資料從來源流入, 經過一連串轉換,最後匯集成結果。

阅读文章 →