原碼、反碼、補碼深度解析:從模運算視角理解計算機有符號整數表示
基本概念 機器數:計算機內部二進位表示,最高位為符號位 (0 正、1 負)。 真值:機器數對應的實際數學值。如 10000011 機器數真值為 -3,而非 1
C++ 拷貝建構函數與賦值運算子深度解析:調用時機、深淺拷貝與現代最佳實踐
核心區別 特性拷貝建構函數賦值運算子 語法T(const T&)T& operator=(const T&) 目的用現有物件**建構新物件**將值**賦給已
C++ 迪傑斯特拉算法求最短路徑:完整實現與校園導覽案例
算法原理 Dijkstra 算法解決**單源最短路徑**(非負權有向圖)。維護兩個集合:S (已確定最短路點)、T (未確定)。每輪從 T 選距離最小點加入 S
BZOJ 1146 題解:整體二分 + 樹鏈剖分 + 樹狀數組
問題背景 樹上路徑第 K 大查詢,支援點值修改。經典解法:整體二分(並行二分) 回答「值域第 K 大」,樹鏈剖分 (HLD) 將樹路徑拆為 O(log n) 段
快速排序完整解析:分區策略、遞歸實現、鏈表優化與工程落地
算法核心:分區 快速排序採用分治策略:選一基準值,將陣列分為「小於基準」與「大於基準」兩部分,基準歸位後遞歸處理左右子陣列。平均時間複雜度 O(n log n)
C 語言計算最小公倍數:基於 GCD 的高效算法
數學關係 最小公倍數 (LCM) 與最大公約數 (GCD) 滿足關係: lcm(a, b) = |a × b| / gcd(a, b) 此公式避免暴力枚舉,效率
C 語言輾轉相除法(歐幾里得算法)求最大公約數
算法原理 輾轉相除法(歐幾里得算法)基於定理:gcd(a, b) = gcd(b, a mod b)。反覆取餘直到餘數為 0,最後的非零除數即為最大公約數。
Effective C++ 條款 16:成對使用 new 與 delete
核心原則 new 與 delete、new[] 與 delete[] 必須**精確配對**。混用會導致未定義行為:解構函數調用次數錯誤、記憶體洩漏、堆損壞。
C 語言計算子串出現次數:strstr 迭代法實現
問題描述 給定主字串 str 與子串 str1,計算 str1 在 str 中出現的次數(允許重疊)。 核心算法:strstr 迭代查找 strstr(hay
Effective C++ 條款 17:以獨立語句將 newed 物件存入智慧指標
核心問題 單一表達式中同時 new 物件並構造智慧指標,若參數求值順序導致 new 成功但智慧指標構造前拋出異常,將發生記憶體洩漏。 危險代碼模式 void
Effective C++ 條款 18:介面設計易正確使用、難誤用
核心原則 好的介面應讓「正確使用」成為最自然、最容易的路徑,而讓「錯誤使用」難以編譯通過或運行時報錯。 策略一:強型別參數防止參數順序錯誤 // 差:僅用 i
Effective C++ 條款 19:設計 class 如同設計 type
核心觀點 設計一個新類別,就是在設計一個新型別。優秀的類別設計應像內建型別(int, double)一樣自然、直觀、安全。需系統思考以下 13 個關鍵問題:
C 語言指針完整教學:從入門到多維陣列、函數指針與記憶體模型
1. 指針基礎:什麼是指針? 指針本質是 記憶體地址。每個位元組有唯一編號(地址),變量在編譯時分配固定大小的記憶體單元,指針儲存該單元的起始地址。 指針型別
Effective C++ 條款 20:傾向傳遞引用而非傳值
核心觀點 對於使用者定義型別,函數參數預設應使用 const T&(傳常數引用),而非 T(傳值)。傳值會觸發拷貝建構函數,帶來效能開銷與切片問題。 場景一:
C 語言 FILE 流操作詳解:fopen、fread、fseek、fclose 完全指南
前言 FILE* 流是 C 語言處理二進位檔案的核心介面,適用於已知檔案結構的高效隨機讀寫。本文系統整理四大核心函數用法、參數細節與常見陷阱。 fopen:開
Effective C++ 條款 21:必須返回對象時,勿返回引用
核心觀點 當函數需要返回一個新對象時,應返回 by value,而非 reference 或 pointer。返回區域物件的引用/指標會導致未定義行為;返回靜態
Effective C++ 條款 22:所有成員變量應聲明為 private
核心觀點 類的所有資料成員(non-static data members)應該宣告為 private。這是封裝的核心,提供三大關鍵優勢: 一、統一存取語法