# CPP Lecture1 ![upload_0673f86c099c4a1a5741d9a110bedecf](https://hackmd.io/_uploads/rJaDXxjo1x.png) - __學習++基本概念++、++I/O++ 、++變數型態與運算++__ - __如何引入標準輸出輸入函式庫? (`std`)__ - __什麼是命名空間? (`using namespce`)__ --- ### 前言 ✓ C++ 相對比 Python、Java 執行速度快,有優勢。 目標放在 APCS 需要的技能而不是整個 C++ 本身。 像是標準庫 (STL),`vector`、`map`、`queue` 結構, 都是要熟悉的內建工具,學會一定別人比較快。 再來就直接花時間解題,熟悉解題思路及技巧。 --- #### **📌 一個最簡單的 C++ 程式** ```cpp[] #include <iostream> // 引入標準輸出入所需的函式庫 using namespace std; // 使用標準命名空間(非必要) // C/C++ 程式執行起點: main function int main() { cout << "Hello, World!" << endl; // 輸出文字 return 0; // 結束程式 } // '{' 左花括號 與 '}'右花括號包圍的部分為 main 的程式區塊(block) ``` - 導入標準輸出輸入 ( `cout`/`cin` )。 - 使用命名空間省略 `std::cout` 程式碼更簡潔。 - `main()`:程式的進入點,從 main 開始執行。 - `return 0;`:程式成功執行時返回 0(慣例)。 --- #### **輸出方法: `cout`** ```cpp[] // 此為單行註解的符號 cout << "這是 C++ 語言" << endl; // endl 和 '\n' 都代表換行,差別? cout << "這是 " << "C++ " << "語言" << '\n'; // 輸出與上一行一樣 cout << "數字 " << 114 << "為整數\n"; // 可以輸出數值 /* (多行註解的起頭) cout "<<" 可以記開口方向朝向輸出的內容。  (多行註解的結尾) */ ``` 1. `<<` 用於 `cout`,將內容輸出到終端。 2. `<<` 右方為輸出流(stream),會自動剖析內容。可以為一個 _++值/變數/表達式++_ 等型態。 3. `endl` 等於換行字符(C++ 自定義)。 --- #### **輸出方法: `cout`** ```cpp[] cout << "Hello " << "C++ " << "!"; // 程式碼中的手打換行是會被忽略的,直到遇到分號 ';' // 輸出: "Hello C++ !" ``` ```cpp[] int x = 45; cout << "一個數值: " << 123 << endl; cout << "一個變數的數值: " << x << endl; // 45 cout << "一個表答式: " << (6 + 7) * 8 << endl; // 104 cout << "數值與變數: " << 9 / 45 << endl; // 0 (為何不是 0.2 ???) cout << "數值與變數: " << 9 / 45.0 << endl; // 0.2 (這時候就正確 ?) cout << "混合表達: " << 10 * x + 11 * (12 - x) * x / 15 << endl; // 輸出: -639 ``` :::spoiler **▼ Tip** ++值、變數、表達式、混和運用皆可作為輸出流++ ::: --- #### **讀入方法一: `cin`** ```cpp[] int a, b, c; cin >> a; // 讀取使用者輸入的數值 cout << "你輸入的是:" << a << "\n"; cin >> b >> c; // 讀取連續輸入的數值 cout << "你輸入的是:" << b << " 和 " << c << "\n"; string message; cout << "輸入你想說的話:"; cin >> message; cout << "你想說的是:" << message << "\n"; // cin ">>" 可以記尖端方向只向要存入的容器。 ``` 1. `>>` 用於 `cin`,將內容讀入到記憶體。 2. `>>` 右方為目的儲存空間,會從輸入流(stream)終端讀入並自動剖析型態。 3. 輸入必須符合儲存位置所設定的型別。 (否則可能會有不合預期的值產生) --- #### **讀入方法二: `getline()`** ```cpp[] #include <iostream> #include <string> // 字串型態所需的函式庫 using namespace std; int main() { string text; cout << "請輸入一整行文字含空格:" << endl; getline(cin, text); // 讀取整行輸入,delim 預設為 '\n' cout << "你輸入的是:" << text << endl; return 0; } ``` - getline(++istream&++ is, ++string&++ str, ++char++ delim) - 傳入參數: ++輸入流++, ++字串儲存空間++, ++分割符++ - 會讀取輸入流直到第一個++換行++(預設) 為止 - 通常 APCS 輸入用不上,但以備不時之需 --- #### **讀入方法二: `getline()`** 我們可以指定一個特殊字元作為結束條件,例如 ',' ```cpp[] #include <iostream> #include <string> // 字串型態所需的函式庫 using namespace std; int main() { string text; cout << "請輸入一段文字 (遇到逗號 `,` 會停止讀取):" << endl; // 輸入: ABC,DE getline(cin, text, ','); // 設定 `,` 為分隔符號 cout << "你輸入的是:" << text << endl; // 輸出: ABC return 0; } ``` :::info 當遇到逗號(',')時,getline(cin, text, ',') 會停止讀取,但逗號(',')本身並不會儲存到 text 裡。 ::: --- #### **📊 讀入方法比較** <br/> | 方法 | 範圍 | 遇到空格/換行 | 適用情境 | |-|-|-|-| | `cin >>` | 只讀一個單字 | 空格後的內容會被忽略 | 讀入簡單的數值或單個字串 | | `getline()` | 讀取整行輸入 | 會一直讀到分割符 ('\n' 換行符號) | 讀取整行、帶有空格的字串 | --- #### **小練習1:奇怪的輸入** ```cpp[] #include <iostream> #include <string> using namespace std; int main() { string name; int age; cout << "請輸入姓名:"; cin >> name; cout << "請輸入年齡:"; cin >> age; cout << "Hi " << name << ",你年齡 " << age << " 歲!\n"; return 0; } ``` - 輸入範例 1:Alice`<enter>`25 - 輸入範例 2:Alice Cooper`<enter>`25 (會出現什麼情況?) - 如何修改程式讓 `name` 變數能讀取完整的姓名? --- ### **小練習1:解答** :::spoiler ```cpp[] #include <iostream> #include <string> using namespace std; int main() { string name; int age; cout << "請輸入姓名:"; cin.ignore(); // 確保之前的輸入不影響 getline getline(cin, name); cout << "請輸入年齡:"; cin >> age; cout << "Hi " << name << ",你年齡 " << age << " 歲!\n"; return 0; } ``` ::: --- #### **小練習2:換行陷阱** ```cpp[] #include <iostream> #include <string> using namespace std; int main() { int number; string message; cout << "請輸入一個數字:"; cin >> number; cout << "請輸入一行文字:"; getline(cin, message); // ⚠ cout << "你的數字:" << number << endl; cout << "你的文字:" << message << endl; return 0; } ``` - 試著輸入: 10`<enter>`I love C++ - 有沒有發現沒有成功讀取 "I love C++"? - 為什麼會發生這個問題,該怎麼修正? --- ### **小練習2:解答** :::spoiler ```cpp[] #include <iostream> #include <string> using namespace std; int main() { int number; string message; cout << "請輸入一個數字:"; cin >> number; cin.ignore(); // 忽略換行符 cout << "請輸入一行文字:"; getline(cin, message); cout << "你的數字:" << number << endl; cout << "你的文字:" << message << endl; return 0; } ``` ✅ 加上 `cin.ignore()` 之後 `getline()` 就能讀取完整輸入 ::: --- #### **小練習3:自訂分隔符** - ++Requirement++: 請撰寫一個程式,可以讀取一行文字內容, 但當遇到 `','` (逗號) 時就停止輸入: <br/> ``` // 輸入範例: Hello world, I am learning C++ // 範例輸出: Hello world ``` --- ### **小練習3:解答** :::spoiler ```cpp[] #include <iostream> #include <string> using namespace std; int main() { string input; cout << "請輸入一串文字(遇到逗號 `,` 停止讀取):"; getline(cin, input, ','); cout << "輸入的內容:" << input << endl; return 0; } ``` ::: --- #### 📌 變數宣告 ```cpp[] #include <iostream> #include <cstdlib> // 布林型態所需的函式庫 using namespace std; int main() { int a; // 宣告一個整數變數值 int b = 10; // 宣告一個整數變數並賦予值 float c = 0.45f; // 宣告一個浮點數變數並賦予值 double pi = 3.14; // 宣告一個雙精度浮點數變數並賦予值 char chr = 'A'; // 宣告一個字元變數並賦予值 string s = "Hello"; // 宣告一個字串變數並賦予值 bool flag = true; // 宣告一個布林變數並賦予值 return 0; } ``` - 變數(`Variable`)提供一個有名稱的記憶體空間,方便將數值儲存在記憶體,並在稍後取回使用。 - 在 C++ 中要使用變數,必須先++宣告變數++名稱與指定++資料型態++,但不一定要給予初始值。 --- #### 無型態宣告(`auto`) ```cpp[] int ageForStudent = 5; double scoreForStudent = 80.0; char levelForStudent = 'B'; // 可改為: auto ageForStudent = 5; auto scoreForStudent = 80.0; auto levelForStudent = 'B'; auto ageForStudent; // 只用 auto 卻沒有初始,會發生編譯錯誤 // error: declaration of 'auto ageForStudent' has no initializer ``` <br/> 從 C++ 11 開始,若變數宣告後有明確地初始化, 可以使用 ++`auto`++ 讓編譯器推斷變數型態。 --- #### 🛈 常見資料型態 | 資料型態 | 範圍 | 大小 (bytes) | |-|-|-| | `int` | -2^31 到 2^31 – 1 | 4 | | `float` | ±3.4E-38 ~ ±3.4E+38 | 4 | | `double` | ±1.7E-308 ~ ±1.7E+308 | 8 | | `char` | 1 個 ASCII 字元 | 1 | | `bool` | true or false (1 或 0) | 1 | | `string` | 變++長字串++ | 依內容長度 | | `long long` | -2^63 到 2^63 – 1 | 8 | <!-- | unsigned int | 0 ~ 4,294,967,295 | 4 | | unsigned long long | 0 ~ 18,446,744,073,709,551,615 | 8 | | wchar_t | 1 個 Unicode 字元 | 2 或 4 | --> --- #### 1️⃣ ++`int`++(整數型態) ```cpp[] int a = 10; int b = -5; cout << "a = " << a << ", b = " << b << endl; ``` - 用途: 儲存整數值,用於計算、迴圈等。 - 範圍: -2,147,483,648 ~ 2,147,483,647 (32-bit env) --- #### 2️⃣ ++`float`++ / ++`double`++ (浮點數型態) ```cpp[] float pi_f = 3.141592653f; // 單精度 (須加 f) double pi_d = 3.141592653589793; // 雙精度 cout << "float: " << pi_f << endl; cout << "double: " << pi_d << endl; ``` - 用途: 儲存小數值,double 精度比 float 高,建議優先使用 double。 - 精度: - float: 大約 7~8 位有效數字 - double: 大約 15~16 位有效數字 --- #### 3️⃣ ++`char`++ (字元型態) ```cpp[] char letter = 'A'; cout << "字元: " << letter << endl; ``` - 用途: 儲存 單一字元 (ASCII 或 Unicode)。 - 大小: 1 byte (char 只有 256 個可能值)。 - 表示方式: 用單引號 'A' 而非 "A" (後者為 string)。 <br/> 🔹 注意: 'A' 其實對應 ASCII 值 65,透過 int 轉換: ```cpp[] char letter = 'A'; cout << (int)letter; // 輸出: 65 ``` --- ### ==ASCII Code 表格== ![asciifull](https://hackmd.io/_uploads/Bkpbf7x31g.gif) - ASCII 泛用的字碼標準。 使用`7`個位元(bit)來儲存每個字元,所以可代表`128`個不同的英文、數字、符號或一些運作(就是鍵盤上的鍵位) --- #### 4️⃣ ++`bool`++(布林型態) ```cpp[] bool isStudent = true; bool ihasSalary = false; cout << "學生身份: " << isStudent << endl; cout << "有無薪水: " << ihasSalary << endl; ``` - 用途: 表真假 (true/false),內部以 0 和 1 存儲。 - 常見用途: ++條件判斷++、++迴圈控制++ (if, while, for) <br/> :::success 🔹 注意 true 會輸出 1,false 會輸出 0。注意: ::: --- #### 5️⃣ ++`string`++ (字串型態) ```cpp[] string name = "Alice"; cout << "Hello, " << name << "!" << endl; // 字串操作 string a = "Hello"; string b = "World"; string c = a + " " + b; cout << c << endl; // Hello World ``` - 用途: 儲存 字串 (`"Hello"`、`"C++"` 等) - 需要 `#include <string>` - 可變長度,不像 char 陣列 (`char[]`) --- #### 6️⃣ ++`long long`++ (大數整數) ```cpp[] long long bigNum = 10000000000LL; // 注意結尾 "LL" cout << bigNum << endl; ``` <br/> - 用途: 儲存 超大整數,避免 int 溢位 - 範圍(64-bit): - 下限: -9,223,372,036,854,775,808 - 上限: 9,223,372,036,854,775,807 --- ### 📎++資料型態總結++ >> --- | 型態 | 主要用途 | 需注意事項 | | -|-|- | | `int` | 一般整數 | 避免溢位,較大數請用 ++`long long`++ | | `float` | 低精度小數 | 有精度誤差,推薦用 double | | `double` | 高精度小數 | 一般浮點數計算優先選擇 | | `char` | 單一字元 | 需用 單引號 'A' | | `bool` | 表示真假 | true 會輸出 1,false 會輸出 0 | | `string` | 儲存長字串 | `#include <string>` 才能使用 | <!-- | long long | 超大整數 | int 溢位時可用 | | unsigned int | 無負數整數 | 負數會溢位 | | wchar_t | 儲存 Unicode 字元 | 需 L'' 前綴,搭配 wcout | --> --- #### 💻 運算子(Operators) <br/> 用來對++變數++或++數值++執行計算或邏輯判斷的符號, 依功能分類可以分為以下幾類: - (1) **`算術運算子`**(Arithmetic Operators) - (2) **`賦值運算子`**(Assignment Operator) - (3) **`比較運算子`**(Comparison Operators) - (4) **`邏輯運算子`**(Logical Operators) - (5) **`位運算子`** (Bitwise Operators) --- #### 1. 算數運算子 > - **以下以 a = `10`, b = `3` 為範例** | 運算子 | 說明 | 範例 | 結果 | |-|-|-|-| | `+` | 加法 | a + b | 13 | | `-` | 減法 | a - b | 7 | | `*` | 乘法 | a * b | 30 | | `/` | 除法 | a / b | 3 (取整) | | `%` | 取餘數(模數) | a % b | 1 | 其實就是數值運算,如加法、減法、乘法等 🔹`%` 只適用於整數運算,不能用於++浮點數++ --- #### 1. 算數運算子 - 範例 ```cpp[] int a = 10, b = 3; cout << a / b << endl; // 3 cout << (double)a / b << endl; // 3.33333,`a` 運用到型態轉換 cout << 10.0 / b << endl; // 3.33333 cout << a / 3.0 << endl; // 3.33333 cout << a % b << endl; // 1 ``` * 補充: 在 C++ 中,我們可以透過++型別轉換++(Type Casting)來強制變數轉換為不同的資料型態。這在除法運算、數據處理、記憶體管理等情境需多注意,包括以下三種轉換方式: * 括號型態轉換(C-style Casting) * 標準型別轉換(`static_cast<type>()`) * 隱式型別轉換(Implicit Type Conversion) _- 後續再詳細提及 -_ <!-- | 型別轉換方式 | 語法 | 適用情境 | 優點 | |-|-|-|-| | C-style 強制轉換 | (double)a / b | 快速轉換但不安全 | 簡單直覺,但可能導致難以追蹤的錯誤 | | C++ 標準轉換 | static_cast<double>(a) / b | 一般數值轉換 | 更安全,推薦使用 | | 隱式型別轉換 | double y = x; | 自動轉換時使用 | 可讀性高,但需注意精度問題 | --> --- #### 2. 賦值運算子 > - **以下以 `int a;` 為範例** | 運算子 | 說明 | 範例 | 累計結果 |-|-|-|-| | `=` | 賦值 | a = 1 | 1 | | `+=` | 加上某值 | a += 2 | 3 | | `-=` | 減上某值 | a -= 4 | -1 | | `*=` | 乘上某值 | a *= 25 | -25 | | `/=` | 除上某值 | a /= 2 | -12 | | `%=` | 模上某值 | a %= 7 | -5 | 與算數運算子有點相似,預算作用於對象本身 ```cpp[] // 小問題: int b = -5; b %= 6; // b = ?? ``` --- #### 3. 比較運算子 > - **以下以 a = `10`, b = `3` 為範例** | 運算子 | 說明 | 範例 | 結果 | |-|-|-|-| | `==` | 等於 | a == b | ++false++ (0) | | `!=` | 不等於 | a != b | ++true++ (1) | | `>` | 大於 | a > b | ++true++ (1) | | `<` | 小於 | a < b | ++false++ (0) | | `>=` | 大於等於 | a >= b | ++true++ (1) | | `<=` | 小於等於 | a <= b | ++false++ (0) | 比較運算子不會改變變數本身的值, 只會返回 true 或 false --- #### 3. 比較運算子 - 範例 ```cpp[] int x = 5, y = 10; cout << (x > y) << endl; // 0 (false) cout << (x != y) << endl; // 1 (true) cout << (5.0 == 5) << endl; // ? cout << ('A' == 65) << endl; // ?? cout << ('B' == 65) << endl; // ?? cout << ((int)'A' == 65) << endl; // ?? cout << ((double)'A' == 65) << endl; // ?? cout << ((x == y) == 0) << endl; // !? cout << ((x == y) == 1) << endl; // !!?? cout << ((x == y) != (x != y)) << endl; // !!!!!!????? ``` 基於前面學到的 請判斷以上輸出的結果會是什麼呢 `??` --- #### 4. 邏輯運算子 > - **以下以 a = `10`, b = `3` 為範例** | 運算子 | 說明 | 範例 | 結果 |-|-|-|-| | `&&` | AND(且) | (a > 5 && b < 5) | true (1) | | `\|\|` | OR(或) | (a < 9 \|\| b > 2) | true (1) | | `!` | NOT(反向) | !(a > 5) | false (0) | <br/> - `&&(AND)`:兩個條件都成立結果才為 true。 - `||(OR)`:其中一個條件成立結果就為 true。 - `!(NOT)`:將 true 變成 false,false 變成 true。 --- #### 4. 邏輯運算子 - 範例 ```cpp[] int a = 0, b = 1; int c = 2, d = 3; int e = -1, f = -2; cout << (a && b) << endl; // 0 (false) cout << (a || b) << endl; // 1 (true) cout << (c && d) << endl; // ? cout << (c || d) << endl; // ? cout << (e && f) << endl; // ? cout << (e || f) << endl; // ? cout << !(1) << endl; // ? cout << !!0 << endl; // ? cout << !((1 == 0) || (1 != 0)) << endl; // ?? cout << ((1 == 0) || (1 != 0)) << endl; // ??? ``` 一樣思考一下,output 會是什麼 `?` --- #### 5. 位運算子 > - **以下以 a = `5`, b = `3` 為範例** > 5_10 = 0101_2, 3_10 = 0011_2 | 運算子 | 說明 | 範例 | 結果 | |-|-|-|-| | `&` | 位元 AND | a & b | 1 (0001) | | `\|` | 位元 OR | a \| b | 7 (0111) | | `^` | 位元 XOR | a ^ b | 6 (0110) | | `~` | 位元 NOT | ~a | 1...1010(取反) | | `<<` | 左移位 | a << 1 | 10 (0101 -> 1010) | | `>>` | 右移位 | a >> 1 | 2 (0101 -> 0010) | 位元運算子用於對++二進位++進行運算,除了`考題`之外常見於效能優化、低階硬體開發等。 --- #### 5. 位運算子 - 範例 ```cpp[] int a = 4, b = 7; cout << (a & b) << endl; // 4 cout << (a | b) << endl; // 7 cout << (a ^ b) << endl; // ?? cout << (a << 1) << endl; // ?? cout << (a >> 1) << endl; // ?? cout << (b >> 1) << endl; // ??? ``` - `&` 可以用來 檢查二進位的某一位是否為 1。 - `|` 可用於 設定某些位元為 1。 - `^` 可用來 做數據加密 或 交換兩個數值。 - `<<` 和 `>>` 可用於快速乘除 2。 --- ### 📎 運算子總結 | 類別 | 說明 | |-|-| | `算術運算子` | 基本數值運算 | | `賦值運算子` | 快速進行計算並賦值 | | `比較運算子` | 判斷條件是否成立 | | `邏輯運算子` | 判斷布林邏輯 | | `位運算子` | 二進位運算 | --- ### ★ 元分類運算子 (補充) | 類型 | 運算子 | 作用 | |-|-|-| | 一元運算子(Unary) | `++ -- ! ~` | 作用於單一變數或值 | | 二元運算子(Binary) | `+ % != &&` | 作用於兩兩變數或值 | | 三元運算子(Ternary) | `? :` | 三個操作數,通常用於條件判斷 | <br/> ==三元運算子屬於語法糖,非必要用到== 🔗 ++[C/C++ 三元運算子](https://shengyu7697.github.io/cpp-ternary-operator/)++ --- #### 🕮 函式庫與命名空間 #### (Libraries & Namespaces) <br/> 在 C/C++ 中,為了能夠使用特定功能,我們會在程式開頭包含`函式庫` (的名稱),並透過`命名空間`來使用++函式++或++物件++。這些概念對於 C++ 的應用至關重要。 --- #### 1. `#include` 與 ++Header File++ <br/> 當 `#include` 被編譯器讀取時,它會將對應++標頭檔++的內容直接插入到程式碼中,這意味著: - 標頭檔只是程式碼的擴展,不會影響執行效能 - 需要的函式庫才引入,避免不必要的編譯時間 - 系統函式庫通常使用 `< >`,自訂函式庫用 `" "` --- #### 📜 常見 ++[Header File](https://hackmd.io/@William8334551/CPP-Lib)++ <br/> | 標頭檔 | 功能 | |-|-| | `<iostream>` | 標準輸出入 (`cin`, `cout`) | | `<cstdlib>` | 標準函式庫 (`bool`, `rand`, `srand`, `abs`, `atoi`, `exit`) | | `<string>` | 字串操作 (`string`) | | `<vector>` | 動態陣列 (`vector`) | | `<map>` | 關聯式容器 (`(unordered_)map`) | | `<cmath>` | 數學函式 (`sqrt()`, `pow()`) | | `<algorithm>` | 演算法 (`sort()`, `max()`) | --- ### 引入函式庫 - 範例 ```cpp[] #include <iostream> // 載入標準輸入輸出函式庫 #include <cmath> // 載入數學運算函式庫 int main() { std::cout << "平方根:" << sqrt(25) << std::endl; return 0; } ``` --- ### ☑ ++`using namespace std;`++ 是什麼❓ <br/> C++ 中的標準函式庫(如 `cout`、`cin`、`endl`)都被定義在 `std` 命名空間裡,因此我們需要使用 `std::cout`, `std::end` 來呼叫它們: ```cpp[] #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } ``` --- #### ✔️ 簡化 `std::` 的語法 <br/> ```cpp[] using namespace std; ``` 這樣就能直接使用 `cout`、`endl` 而不需要 `std::` ```cpp[] #include <iostream> using namespace std; // 省略 std:: int main() { cout << "Hello, World!" << endl; return 0; } ``` --- #### 📌 ++`using namespace std;`++ 是否必要? <br/> 使用命名空間雖然方便,但可能會帶來++命名衝突++(Naming Conflict),尤其在大型專案中, 建議使用++範圍限定++的 `using` 或 `std::` 前綴: ```cpp[] #include <iostream> using std::cout; using std::endl; int main() { cout << "Hello, World!" << endl; return 0; } ``` --- #### 標頭檔(Header File) `V.S` 函式庫(Library) ![image](https://hackmd.io/_uploads/rkw198bhyx.png) --- ### `∑` Summary <br/> - 函式庫是預先編寫好的 C++ 標準函式的實踐 - `#include` 負責++引入函式庫++,提供額外功能 - 包含必要標頭檔,避免過多 `#include` 降低效能 - ++自訂函式庫++使用 `" "`, ++系統函式庫++則用 `< >` - 大型專案中不建議濫用: - 避免 `using namespace std;`,改用 `std::` - 特定 `using std::cout;`,減少++全域污染++ --- ### 🔍 小測驗 1️⃣ 為何需要 `#include<iostream>` 才能使用 `cout` ?? :::spoiler ▼ Answer 👉 `cout` 是定義在++標頭檔++內的 `std::cout`,C++ 預設不會自動載入這些功能,所以需要 `#include <iostream>` 來引入標準輸入輸出++函式庫++。 ::: --- ### 🔍 小測驗 2️⃣ `using namespace std;` 可能造成哪些問題 ?? :::spoiler ▼ Answer 👉 在大型專案中,可能與其他函式庫的名稱發生衝突,例如 `vector` 在 C++ 標準函式庫與 `OpenCV` 中都有定義,這會導致程式無法正確編譯。建議使用 `std::cout` 來避免命名衝突。 ::: --- ### 🔍 小測驗 3️⃣ 什麼時候應該用 `#include "myheader.h"` 而不是 `#include <myheader.h>` ?? :::spoiler ▼ Answer 👉 `#include "myheader.h"` 用於自訂的標頭檔,編譯器會先從當前目錄尋找該檔案。 👉 `#include <myheader.h>` 用於標準函式庫,編譯器會從系統的標頭檔路徑搜尋該檔案。 ::: --- ### ✎ 習題練習 --- <br/> - [a003. 兩光法師占卜術](https://zerojudge.tw/ShowProblem?problemid=a003) :::spoiler ▼ 模板 ```cpp[] #include <iostream> using namespace std; int main() { int S; // 你的程式: // ... // switch (S) { case 0: cout << "普通\n"; break; case 1: cout << "吉\n"; break; case 2: cout << "大吉\n"; break; } return 0; } ``` ::: <!-- - [...]() -->
{"title":"CPP Lecture1","image":"https://hackmd.io/_uploads/SkLh_yisyg.png","description":"CPP Lecture1.","contributors":"[{\"id\":\"08ecf684-cada-47c1-ad99-984ab62fb65e\",\"add\":19378,\"del\":2268}]"}
    261 views