Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. เกิดอะไรขึ้นเมื่อ Virtual Function ถูกเรียกภายใน Non-Virtual Function ใน C++?

    Polymorphism ทำงานได้แม้ virtual function จะถูกเรียกจากภายใน non-virtual function เพราะการ dispatch ขึ้นอยู่กับ vptr/vtable ของ object จริง ไม่ใช่ฟังก์ชันที่เรียก ตัวอย่าง #include <iostream> using namespace std; class BaseClass { public: void display() { cout << Base display <

  2. เกิดอะไรขึ้นเมื่อ Derived Class Method มี Access Specifier จำกัดกว่า Base Class ใน C++?

    ใน C++ access specifier ตรวจสอบที่ compile-time ตาม static type ของ pointer/reference ไม่ใช่ dynamic type ของ object จริง นี่ทำให้ derived class สามารถ override method ด้วย access specifier ที่เข้มงวดกว่า (เช่น private) ได้ และยังเรียกผ่าน base pointer ได้ กรณีที่ 1: เรียกผ่าน Derived Object โดยตร

  3. Object สร้างใน Block ใน C++ จะถูกเก็บที่ไหนในหน่วยความจำ?

    ใน C++ หน่วยความจำหลักแบ่งเป็น 2 ส่วนสำคัญสำหรับ object: Stack – ตัวแปร/อ็อบเจ็กต์ที่ประกาศภายใน block (function, loop, if, scope) จะจัดเก็บที่นี่ ทำลายอัตโนมัติเมื่อออกจาก scope Heap – object ที่สร้างด้วย new (dynamic allocation) จะอยู่ที่นี่ ต้อง delete เอง ตัวอย่างแสดงพฤติกรรม #include &

  4. ทำไมขนาดของ Empty Class ใน C++ ไม่ใช่ศูนย์?

    ใน C++ ขนาดของ empty class (ไม่มี data member) ไม่ใช่ 0 ไบต์ มักจะเป็น 1 ไบต์ เพื่อให้ object แต่ละตัวมี address ที่แตกต่างกัน ตามมาตรฐาน C++ ตัวอย่าง #include <iostream> using namespace std; class MyClass { }; int main() { cout << sizeof(MyClass); // ได้ 1 } เอาต์พุท 1 เหตุผล ถ

  5. สร้าง C++ Class ที่อนุญาตให้สร้าง Object แบบ Dynamic Allocation เท่านั้น

    เราสามารถบังคับให้ class ไม่อนุญาตให้สร้าง object บน stack (automatic storage) ได้ โดยทำให้ destructor เป็น private คอมไพเลอร์จะ error ตอนพยายามทำลาย object บน stack เพราะต้องเรียก destructor แต่เข้าถึงไม่ได้ สำหรับ dynamic allocation (new) โปรแกรมเมอร์ต้อง delete เอง คอมไพเลอร์จึงไม่บังคับเรียก de

  6. การคำนวณ Index จาก Pointer ที่ STL Functions คืนค่าใน C++

    หลายฟังก์ชันใน STL คืนค่าเป็น iterator/pointer (เช่น max_element(), find()) ซึ่งชี้ไปที่ตำแหน่งในหน่วยความจำ แต่ไม่ได้บอก index โดยตรง บทความนี้แสดงวิธีหา index จาก pointer/iterator ที่ได้ วิธี 1: ลบ iterator ตัวแรก (Pointer Arithmetic) iterator ของ vector/random-access container รองรับการลบกันได้

  7. การสร้าง Gaussian Filter (Kernel) ใน C++

    Gaussian Filter ใช้กันอย่างกว้างขวางใน image processing เพื่อลด noise (blurring) โดยใช้ 2D Gaussian Kernel ที่คำนวณจาก Gaussian Distribution: $$G(x,y)= \frac{1}{2\pi\sigma^{2}}e^{-\frac{x^{2}+y^{2}}{2\sigma^{2}}}$$ ตัวอย่างการสร้าง 5x5 Kernel (σ = 1.0) #include <cmath> #include <iomanip&

  8. การสร้าง Test Cases ด้วย generate() และ generate_n() ใน C++ STL

    การสร้างข้อมูลทดสอบ (test cases) สำหรับอาเรย์มักซับซ้อน C++ STL มีฟังก์ชัน generate() และ generate_n() ใน <algorithm> ช่วยสร้างค่าได้ง่ายและมีประสิทธิภาพ 1. generate(first, last, gen) กำหนดค่าให้ elements ใน range [first, last) โดยเรียก gen() ซ้ำๆ #include <bits/stdc++.h> using namespa

  9. เรขาคณิตด้วย Complex Numbers ใน C++ STL

    ใน C++ STL มีคลาส complex (ใน <complex>) ที่สามารถนำมาใช้แทนจุด (Point) ในระนาบ 2 มิติได้ โดยจินตนาการให้ real() คือแกน x และ imag() คือแกน y การกำหนด Point Class #include <complex> typedef complex<double> point; #define x real() #define y imag() หมายเหตุ: x และ y เป็น macro จึงไ

  10. การ Traverse map และ unordered_map ใน C++ STL

    map และ unordered_map เป็น associative containers ใน C++ STL ที่เก็บข้อมูลเป็น key-value pairs โดย key ต้องไม่ซ้ำกัน เมธอดพื้นฐานของ map begin() – iterator ชี้ไปที่ element แรก end() – iterator ชี้ไปหลัง element สุดท้าย size() – จำนวน elements max_size() – จำนวนสูงสุดที่เก็บได้ empty()

  11. Uniform Initialization ใน C++ (C++11)

    Uniform Initialization เป็นฟีเจอร์ตั้งแต่ C++11 ที่อนุญาตให้ใช้ syntax เดียวกัน (brace-initialization {}) ในการ initialize ตัวแปรและอ็อบเจ็กต์ทุกประเภท ตั้งแต่ primitive types ไปจนถึง aggregates และ classes Syntax type var_name{argument_1, argument_2, ..., argument_n} 1. Initialize Dynamically Al

  12. User Defined Literals (UDL) ใน C++

    ใน C++11 ได้เพิ่มคุณสมบัติ User Defined Literals (UDL) เข้ามา ซึ่งช่วยให้เราสามารถสร้าง literal เองได้สำหรับ built-in types หรือ user-defined types นอกเหนือจาก literal มาตรฐานที่มีอยู่แล้ว Built-in Literals ตัวอย่าง 31 (Integer) 3.5 (Double) 4.2F (Float) p (Character) 31ULL (Unsigned Lo

  13. สร้าง Linked List แบบ 2 มิติจาก Matrix ด้วย Iterative Approach ใน C++

    สมมติว่าเรามีเมทริกซ์ ต้องการแปลงเป็น linked list แบบ 2 มิติโดยใช้วิธี iterative (วนลูป) โหนดมี pointer right และ down เช่นเดียวกับวิธี recursive ตัวอย่างอินพุตและเอาต์พุตเหมือนวิธี recursive ขั้นตอนการแก้ปัญหา (Iterative) สร้างตัวแปร real_head เก็บหัวของลิสต์จริง สร้างอาเรย์ head_arr ขนาด m

  14. สร้าง Linked List แบบ 2 มิติจาก Matrix ด้วย Recursive Approach ใน C++

    สมมติว่าเรามีเมทริกซ์ (matrix) เราต้องการแปลงมันเป็น linked list แบบ 2 มิติโดยใช้วิธี recursive โหนดแต่ละตัวจะมี pointer สองตัวคือ right (ชี้ไปทางขวา) และ down (ชี้ไปทางล่าง) ตัวอย่างอินพุต: 102030 405060 708090 เอาต์พุทจะเป็นโครงสร้าง linked list 2 มิติตามภาพ: ขั้นตอนการแก้

  15. ค้นหาคู่ของตัวเลขที่ผลรวมเท่ากับค่าเป้าหมายใน BST ที่สมดุลด้วย C++

    สมมติว่าเรามีต้นไม้ค้นหาทวีคูณสมดุล (Balanced Binary Search Tree) และค่าเป้าหมาย (target sum) เราต้องเขียนเมธอดเพื่อตรวจสอบว่ามีคู่ของโหนดใดโหนดหนึ่งที่ผลรวมของค่าของมันเท่ากับค่าเป้าหมายหรือไม่ โดยที่ BST นี้เป็น immutable (ไม่สามารถแก้ไขได้) ตัวอย่างเช่น หากอินพุตเป็นต้นไม้ดังภาพ: เอาต์พุทจะเป็

  16. หาการจัดเรียงที่ทำให้ Merge Sort ทำงานช้าที่สุด (worst case) ใน C++

    หาการจัดเรียง (permutation) ของชุดตัวเลขที่ทำให้ Merge Sort ต้องทำการเปรียบเทียบมากที่สุด แม้ว่าเวลาสับซ้อนจะเป็น O(n log n) เสมอ แนวคิด สร้างการจัดเรียงแบบ worst case โดยการแบ่งอาร์เรย์สลับกัน (alternating split) แล้วเรียงย่อยๆ แบบเวียนเกิด ตัวอย่าง อินพุต: {11,12,13,14,15,16,17,18,19,20,21,22,23

  17. หาจำนวนพาร์ติชันสูงสุดที่เรียงลำดับแยกได้แล้วรวมเป็นอาร์เรย์เรียงแล้ว ใน C++

    ได้รับอาร์เรย์ N ตัว ค่าอยู่ในช่วง 0 ถึง N-1 ไม่เรียงลำดับ ต้องการแบ่งเป็นพาร์ติชันมากที่สุดที่แต่ละพาร์ติชันเรียงลำดับแยกได้ แล้วนำมาต่อกันได้อาร์เรย์เรียงลำดับสมบูรณ์ ข้อสังเกต ในอาร์เรย์เรียงแล้ว Arr[i] = i ดังนั้นถ้าส่วนหนึ่งมีค่าสูงสุดเท่ากับ index สุดท้ายของส่วนนั้น ส่วนนั้นสามารถเป็นพาร์ติชั

  18. หากำไรสูงสุดจากการหารลงตัวด้วย A และ B ที่มีกำไรต่างกัน ใน C++

    ได้รับ N, A, B, X, Y ต้องการหากำไรสูงสุดจากตัวเลข 1 ถึง N โดย: หาร A ลงตัว → กำไร +X หาร B ลงตัว → กำไร +Y ตัวเลขที่หารทั้ง A และ B ลงตัว เลือกกำไรสูงกว่า (max(X,Y)) ตัวอย่าง อินพุต: N=4, A=2, B=3, X=2, Y=3 เอาต์พุต: 7 คำอธิบาย: 2,4 หาร 2 ลงตัว (+2+2=4), 3 หาร 3 ลงตัว (+3) รวม 7 อินพุต: N=5, A=2

  19. นับจำนวนเฉพาะในอาร์เรย์ ใน C++

    ได้รับอาร์เรย์ตัวเลข ต้องการนับจำนวนเฉพาะ (prime) ในอาร์เรย์ การตรวจสอบจำนวนเฉพาะ จำนวนเฉพาะ = จำนวนที่มากกว่า 1 และมีตัวหารได้แค่ 1 และตัวมันเอง ตรวจสอบโดยการหารด้วยทุกจำนวน 2 ถึง num/2 ถ้าหารลงตัวใดๆ → ไม่ใช่เฉพาะ ตัวอย่าง อินพุต: arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9} เอาต์พุต: 4 (2, 3, 5, 7) อิน

  20. นับจำนวนสมาชิกน้อยที่สุดในช่วงที่กำหนดของอาร์เรย์ ใน C++

    ได้รับอาร์เรย์ขนาด N และช่วง [L, R] (1-based indexing) ต้องการนับจำนวนสมาชิกที่มีค่าน้อยที่สุดในช่วงนี้ ตัวอย่าง อินพุต: arr[] = {1, 2, 3, 0, 3, 2, 0, 1}, N = 8, L = 2, R = 5 เอาต์พุต: 1 คำอธิบาย: ช่วง index 1-4 (0-based): {2, 3, 0, 3} ค่าน้อยสุด = 0 ปรากฏ 1 ครั้ง อินพุต: L = 3, R = 8 เอาต์พุต: 2

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:212/301  20-คอมพิวเตอร์/Page Goto:1 206 207 208 209 210 211 212 213 214 215 216 217 218