【C++】競程筆記(基礎題型)
【C++】競程筆記(基礎題型) 程式碼範例參考:NTUCPC Guide,此筆記僅為個人學習用途。 萬用標頭檔 #include <bits/stdc++.h> 有些OJ不給用要特別注意,能用就用,其他函式庫名稱還是要背一下。還有因為他抓的函式庫比較多的原因,所以執行會變得有點慢,但基本上不影響。 基本輸出輸入優化(提升速度用) ios::sync_with_stdio(false)(關閉與C同步的關鍵函式) cin.tie(nullptr)(關閉 flush 機制,若代碼有用到 endl,這條就沒屁用了,要注意) endl 建議用 \n 跳脫字元取代。 T 筆測資題型 12345int t;cin >> t;while (t--) { // do something} while() 迴圈,括號裡面如果是 0(false),就停止迴圈。以 t 遞減至 0,是比較聰明且簡潔的做法。 此題目會要求輸入 T 個測資,並使用迴圈執行 T 次讀取。 EOF 處理 1234int n;while (cin >> n) ...
【C++ 筆記】this pointer - part 21
【C++ 筆記】this pointer - part 21 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! this 指針(this pointer) 在 C++ OOP 中,每當呼叫非靜態成員函數時,編譯器會傳遞一種特殊的指標,稱為 “this” 指標。 它特殊的點就在於:它是隱形的。也就是說我們平常在設計 class 的時候,並不會看見 this pointer。 :::success this pointer 指向當前呼叫該函數的物件實例,讓程式可以在成員函數內部存取該物件的成員變數與其他成員函式。 ::: :::success 在 C++ 中,每個物件都能透過 this 指標來存取自己的位址。 ::: :::info Friend Function 沒有 this pointer,因為 Friend 不是類的成員,只有成員函數才有 this 指針。 ::: this pointer 是...
【C++ 筆記】內嵌函數(inline function) - part 20
【C++ 筆記】內嵌函數(inline function) - part 20 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 內嵌函數(inline function) 內嵌函數或稱內聯函數。 在 C++,內嵌函數(inline function)是一種特殊的函數。 此函數需要用關鍵字 inline 於欲使用之函數名前方,使 compiler 將函數呼叫替換為函數的本體代碼,而非如普通函數要透過函數呼叫機制(如:跳轉到函數地址並回傳)。 這種方式可減少函數呼叫的開銷(如:stack 的 push、pop 操作),從而提高程式執行效率。 :::info 以下擷取至菜鳥教程的原理解釋: C++ 內聯函數通常與類別一起使用。如果一個函數是內聯的,那麼在編譯時,編譯器會把函數的程式碼副本放置在每個呼叫該函數的地方。 對內聯函數進行任何修改,都需要重新編譯函數的所有客戶端,因為編譯器需要重新更換一...
【C++ 筆記】Friend Classes & Functions - part 19
【C++ 筆記】Friend Classes & Functions - part 19 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! Friend Class Friend Class 可以直接存取其他 class 的 private、protected 成員,只要當這個 class 被宣告為 friend。 因為 private、protected 成員不能直接存取,所以可以用 friend 的方式指定某 class 為好友 class,這在某些時候會變得很好用,如常見的 Data Structure:Linked-list。 宣告一個 friend class 格式如下: 1friend class class_name; // declared in the base class 以下是個範例: 12345678910111213141516171819202122232425...
【個人筆記】C++ ZeroJudge 基礎題庫解題(純練習) - part 2
【個人筆記】C++ ZeroJudge 基礎題庫解題(純練習) - part 2 a015.:https://zerojudge.tw/ShowProblem?problemid=a004 難度:★★★☆☆ 二維陣列、巢狀迴圈應用。 123456789101112131415161718192021222324#include <iostream>#include <vector>using namespace std;int main() { int rows, cols; while (cin >> rows >> cols) { vector<vector<int>> matrix(rows, vector<int>(cols)); for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { ...
【個人筆記】C++ ZeroJudge 基礎題庫解題(純練習) - part 1
【個人筆記】C++ ZeroJudge 基礎題庫解題(純練習) - part 1 a003.:https://zerojudge.tw/ShowProblem?problemid=a003 難度:☆☆☆☆☆ 基本IO、條件判斷、四則運算 12345678910111213141516171819#include <iostream>using namespace std;int main(){ int M, D, S; cin >> M >> D; S = (M*2+D)%3; if (S==0){ cout << "普通"; } else if (S==1){ cout << "吉"; } else{ cout << "大吉"; } return 0;} a004.:...
【C++ 筆記】解構子(Destructors) - part 18.5
【C++ 筆記】解構子(Destructors) - part 18.5 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 解構子(Destructors) 這 18.5 part 是來補全前面建構子只講到一點的解構子,由於解構子的概念並未像建構子那麼複雜,所以只需要 0.5 part 的時間來學習XD。 解構子(Destructor),又名為析構函數,同於建構子是個特殊的成員函數,在當物件的作用域結束時,編譯器會呼叫此函數。 Destructor 可釋放類別中的物件先前使用的所有記憶體,可避免記憶體洩漏與資源浪費的情形發生。 :::success 解構子名稱與類別名稱相同,但是需要加上波浪符號(~)在最前面,以示為解構子。 ::: 123456class ClassName {public: ~ClassName() { // Body of Destru...
【C++ 筆記】建構子(Constructors) - part 18
【C++ 筆記】建構子(Constructors) - part 18 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 建構子(Constructors) 建構子(Constructors),又稱建構函數、建構式,為一種特別的 class members,每次實例化該類別的物件時,編譯器都會呼叫建構子(表示每次建立物件都會用到此函數)。建構子與 class 具有相同的名稱,並且可以在 class 中進行內部定義或外部定義。 另外建構子也不會回傳任何型態,也不會回傳 void。 :::success 可以想像建構子就是做初始化的動作。 ::: 在 C++ 中,共有下列四種建構子: 預設建構子(Default Constructors) 參數化建構子(Parameterized Constructors) 複製建構子(Copy Constructors) 移動建構子(Move Constructo...
【C++ 筆記】類別(Class)的基礎概念 - part 17
【C++ 筆記】類別(Class)的基礎概念 - part 17 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) C++ 是一種物件導向程式設計(object-oriented programming:OOP)之語言。 通常有 OOP 的程式語言,都會具有 Class 類別,這種概念。 :::success 那麼物件是什麼呢? 物件(Object):具有兩種性質,稱為屬性(Attributes)及方法(Methods)。 屬性(Attributes): 屬性是用來敘述物件特性的資料,通常是物件的狀態,也常被定義為 class 中的「變數」。 例:在名為「car」的物件中,屬性可以為 顏色、品牌、速度 等。 也可以想成是RPG角色的「能力屬性」,STR、HP、MP、DEX 等等。 方法(Methods): 簡言之,就是一個物件他的「行為」,Methods 通常是...
【Windows 11 秘笈】重灌或裝新系統必做的五件事!
【Windows 11 秘笈】重灌或裝新系統必做的五件事! 哈囉大家好,我是 LukeTseng,近期換新電腦裝系統時,發現忘記 win 11 有些操作令我不太習慣,且又忘記該如何操作,實在令人煩惱,所以便製作了這篇文章。 :::info 註:這篇文章純粹是以我個人習慣而製作的,若有些設定你覺得不習慣可改回去 ::: 廢話不多說,馬上開始吧! 一、工作列置左 首先工作列靠左是從 xp 時代至 win10 時代當中漸漸習慣的一件事,身為 windows 的長期使用者,當然務必首要的就是將 win 11 這惱人的工作列置中改成靠左啦! 那其實要靠左也很簡單,首先我們透過快捷鍵 windows 鍵 + i 鍵 打開設定,或是透過工作列底下的 windows 開始鍵打開也可以。 進入 [個人化] 後,可以看到有個選項叫做 [工作列]。 點進去 [工作列] 後,可看到最底下有個叫做 [工作列行為] 的選單。 點擊一下後,將 [工作列對齊] 中最右邊的下拉選單點擊一下,將 [置中] 改成 [靠左]。 二、右鍵選單 要改回 w10 以前時代的右鍵選單,有兩種方法可使用: 登錄編輯程式(...
【C++ 筆記】vector - part 16
【C++ 筆記】vector - part 16 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) 在 C++ 中,vector 就像可調整大小的陣列 array。 vector 和 array 都是用於儲存相同資料型態的多元素資料結構(Data structure)。 兩者之間最大的差別,就是: :::success vector:可調整大小。 array:不可調整大小,初始化時就固定了。 ::: 其中 vector 最重要的就是能夠自動管理記憶體使用,不必我們手動分配、釋放記憶體。 根據菜鳥教程,將 vector 列出了以下四點基本特性: 動態大小:vector 的大小可以根據需要而自動增長和縮小。 連續存儲:vector 中的元素在記憶體中是連續儲存的,這使得存取元素非常快速。 可迭代:vector 可以被迭代,所以可用迴圈(如 for 迴圈)來存取它的元...
【C++ 筆記】結構(Struct) - part 15
【C++ 筆記】結構(Struct) - part 15 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) Structure(又稱 Struct),英翻中則為結構(體),是一種用來整合不同資料型態的自訂資料型態,讓我們能夠更方便地管理和使用相關的變數。 W3School 這樣定義: Structures (also called structs) are a way to group several related variables into one place. Each variable in the structure is known as a member of the structure. 結構是一種方法,將多個相關聯的變數分組到一個位置的方法。每個變數在結構裡面則被稱為結構中的成員(member)。 而在 C++ 中 struct 的格式如下...
【C++ 筆記】參考(Reference) - part 14
【C++ 筆記】參考(Reference) - part 14 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) 參考(Reference)是物件的別名(Alias),也就是替代名稱,對參考名稱存取時該有什麼行為,都參考了來源物件該有的行為,在 C++ 中,「物件」這個名詞,不單只是指類別的實例,而是指記憶體中的一塊資料。 所以參考變數是現存變數的另一個名字,將參考初始化為某個變數,就可以使用該參考名稱或變數名稱來指向變數。 參考常常與指標做比較,原因是他們的性質相同,同樣地,我們先從定義上來看: :::success 指標(Pointer): 指標是一種變數,用來儲存其他變數的記憶體位址。指標可以直接對記憶體進行運算。 宣告時使用星號(*)來表示,例如:int* ptr; 表示 ptr 是一個指向整數的指標。 ::: :::info 參考(Referen...
【C++ 筆記】指標(Pointer)(下) - part 13
【C++ 筆記】指標(Pointer)(下) - part 13 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 指標與陣列(Pointer vs. Array) 指標與陣列其實是有相關性的,先從定義上來看: :::success 陣列的定義: 陣列是一組相同型態的元素,這些元素在記憶體中是連續儲存的。陣列的名稱可以視為指向其首項元素的指標。例如,對於一個整數陣列 int arr[5];,arr 實際上是指向 arr 的指標。 ::: :::info 指標的定義: 指標是一種變數,用來儲存其他變數的位址。指標可以指向任何型態的資料,包括陣列。 ::: 指標和陣列在很多情況下是可以互換的。例如,一個指向陣列開頭的指標,可以透過使用指標的算術運算或陣列索引來存取陣列。請看下面的程式: 12345678910111213141516171819202122232425#include <io...
【C++ 筆記】儲存類別(Storage classes) - part 12
【C++ 筆記】儲存類別(Storage classes) - part 12 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 簡介(Introduction) C++ Storage Classes are used to describe the characteristics of a variable/function. It determines the lifetime, visibility, default value, and storage location which helps us to trace the existence of a particular variable during the runtime of a program. C++ 儲存類別用於描述變數 / 函數的特徵。它決定了生命週期、可見性、預設值和儲存位置,這有助於我們在程式執行時,追蹤特定變...



