Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. คำสั่ง restrict ใน C: บอก Compiler ว่า Pointer ไม่ Alias กัน

    restrict เป็น Keyword ใน C (C99) ใช้กับ Pointer Declaration เพื่อบอก Compiler ว่า Pointer นี้เป็นทางเข้าถึงเดียว (Unique Access) ไปยัง Object ที่ชี้อยู่ ช่วยให้ Compiler Optimize ได้ดีขึ้น Syntax void func(int* restrict ptr1, int* restrict ptr2, int* restrict ptr3); // หรือ void func(int* restrict

  2. การดำเนินการกับ Struct Variables ใน C: Assignment ได้ แต่ Comparison ไม่ได้

    ใน C Language Struct Variables รองรับ Assignment Operator (=) เท่านั้น** สำหรับ Built-in Operations ไม่รองรับ ==, !=, <, > และ Operators อื่นๆ โดยตรง สิ่งที่ทำได้: Assignment #include <stdio.h> typedef struct { int real; int imag; } Complex; void display(Complex c) { print

  3. ฟังก์ชัน rename() ใน C/C++: เปลี่ยนชื่อไฟล์

    std::rename (Header <cstdio> / <stdio.h>) ใช้สำหรับ เปลี่ยนชื่อไฟล์ หรือ ย้ายไฟล์ ระหว่าง Directory (บน Filesystem เดียวกัน) ลายเซ็น int rename(const char* old_filename, const char* new_filename); old_filename: Path ปัจจุบัน new_filename: Path ใหม่ คืน 0 = สำเร็จ, -1 = ล้ม

  4. ฟังก์ชัน remove() ใน C/C++: ลบไฟล์

    std::remove (Header <cstdio> / <stdio.h>) ใช้สำหรับ ลบไฟล์ ออกจาก Filesystem ทำให้เข้าถึงไม่ได้อีกต่อไป ลายเซ็น int remove(const char* filename); คืนค่า 0 = สำเร็จ คืนค่า -1 = ล้มเหลว (ตั้งค่า errno) ตัวอย่าง: สร้างไฟล์ แล้วลบ #include <cstdio> #include <cstring>

  5. Copy Constructor ใน C++: การสร้าง Deep Copy และ Rule of Three/Five

    Copy Constructor เป็น Constructor พิเศษที่สร้าง Object ใหม่โดยคัดลอกจาก Object เดียวกัน Class ที่มีอยู่แล้ว Signature มาตรฐาน: ClassName(const ClassName& other); เมื่อไหร่ถูกเรียก? Initialize Object จาก Object อื่น: ClassName obj2 = obj1; Pass Object โดย Value ให้ Function: void func(Clas

  6. ตรวจสอบ Input เป็นตัวเลขใน C++: isdigit และ string validation

    การตรวจสอบว่า String Input ประกอบด้วยตัวเลข (Digits 0-9) เท่านั้น เป็นงานพื้นฐานใน Input Validation มีหลายวิธีใน C++ ตั้งแต่ Manual Loop ไปจนถึง Library Functions วิธีที่ 1: Manual Loop + isdigit (Classic) #include <iostream> #include <string> #include <cctype> // isdigit bool is

  7. Static Data Member Initialization ใน C++: การกำหนดค่าเริ่มต้นให้ Static Member

    Static Data Member ใน C++ Class เป็นสมาชิกที่ร่วมกันใช้ระหว่างทุก Instance (Object) ของ Class นั้น ต้อง Define และ Initialize นอกจาก Class Definition (Definition) เพราะ Class Definition เป็นแค่ Declaration Syntax และกฎ class MyClass { static int count; // Declaration (ใน Class) stat

  8. Reference Parameters ใน C++: Call by Reference และการสลับค่า

    Reference Parameter (Call by Reference) ใน C++ ช่วยให้ฟังก์ชันเข้าถึงและแก้ไข Argument ต้นฉบับได้โดยตรง แทนที่จะทำงานบน Copy (Call by Value) ใช้สัญลักษณ์ & ติดกับ Parameter Type Syntax และกลไก // Declaration void swap(int& x, int& y); // x, y เป็น Reference ไปยัง Argument จริง // Definition v

  9. ฟังก์ชัน free() ใน C/C++: การปล่อยหน่วยความจำ Dynamic Memory

    free() เป็นฟังก์ชันใน C Standard Library (<cstdlib> / <stdlib.h>) ใช้สำหรับ Deallocate (ปล่อย) หน่วยความจำที่จองไว้ด้วย malloc(), calloc(), หรือ realloc() เท่านั้น ลายเซ็น void free(void* ptr); ptr: Pointer ที่ได้จาก malloc/calloc/realloc ถ้า ptr == nullptr: ไม่ทำอะไร (Safe)

  10. สร้างสุ่มตัวเลขด้วย C++11 <random> Library: mt19937 และ Distributions

    C++11 <random> Library ให้ Random Number Generation ที่ทันสมัย แทน rand() แบบเก่า โครงสร้างหลักคือ Engine (Bit Generator) + Distribution (Statistical Mapping) องค์ประกอบหลัก Random Device (std::random_device): Non-deterministic Seed Source (Hardware/OS Entropy) Engine (std::mt19937):

  11. การใช้ clock() ใน C++: วัดเวลาการทำงานของโปรแกรม

    ฟังก์ชัน clock() ใน Header <ctime> (หรือ <time.h>) ใช้วัด Processor Time (CPU Time) ที่โปรแกรมใช้ไป ไม่ใช่ Wall-clock Time (Real Time) เหมาะสำหรับ Benchmarking และ Profiling หลักการทำงาน คืนค่า clock_t (Integer Type) = จำนวน Clock Ticks จากเริ่มโปรแกรม ค่าคงที่ CLOCKS_PER_SEC =

  12. Reverse Range-based For Loop ใน C++: ใช้ Boost และ C++20

    C++ Range-based For Loop (for (auto& x : container)) รองรับเฉพาะ Forward Iteration ตั้งแต่ C++11 หากต้องการ Iterate ย้อนหลัง (Reverse) มีหลายวิธี 1. ใช้ Boost.Range (Classic Solution) Header: <boost/range/adaptor/reversed.hpp> #include <iostream> #include <vector> #include <boo

  13. Generic Lambda ใน C++14: ฟังก์ชันแนมที่รับ Type ใดๆ ได้

    Generic Lambda (หรือ Polymorphic Lambda) เป็นฟีเจอร์สำคัญของ C++14 ที่อนุญาตให้ Lambda Expression ใช้ auto ใน Parameter List ทำให้ Lambda หนึ่งเดียวสามารถรับ Argument หลาย Type ได้ (Template-like) Syntax // C++11: Parameter Type ต้องระบุชัดเจน auto add_int = [](int x, int y) { return x + y; }; //

  14. สร้างสุ่มตัวเลขใน C++: จาก rand() ไปสู่ <random> (C++11)

    การสร้างสุ่มตัวเลขใน C++ พัฒนาขึ้นมาอย่างมาก จาก C-style rand() ไปสู่ Modern C++ <random> Library (C++11) ที่ให้ Distribution, Engine และ Quality ที่ดีกว่ามาก 1. Legacy: rand() + srand() (C-style) #include <cstdlib> #include <ctime> #include <iostream> int main() { std:

  15. การ Initialize Const Member ใน Constructor: Member Initializer List

    ใน C++ const Member Variable ต้องถูก Initialize (กำหนดค่าเริ่มต้น) ครั้งเดียวเท่านั้น และต้องทำใน Member Initializer List** ของ Constructor ไม่สามารถ Assign ได้ภายใน Body ของ Constructor Syntax class ClassName { const Type memberName; public: ClassName(ParamType param) : memberName(param)

  16. Lexicographically Next Permutation ใน C++: std::next_permutation

    Lexicographically Next Permutation คือ Permutation (การเรียงสับเปลี่ยน) ที่มาถัดไปในลำดับ Dictionary Order (Lexicographical Order) ใน C++ มีฟังก์ชันสำเร็จรูป std::next_permutation ใน Header <algorithm> ลายเซ็น template <class BidirIt> bool next_permutation(BidirIt first, BidirIt last);

  17. ฟังก์ชันที่ Overload ไม่ได้ใน C++: กฎและตัวอย่าง

    ใน C++ Function Overloading ต้องการ Parameter List ที่แตกต่างกัน (Signature) โดย Return Type ไม่รวมอยู่ใน Signature บทความนี้สรุปกรณีที่ Overload ไม่ได้ แม้ Parameter ดูต่างกัน กรณีที่ Overload ไม่ได้ (Compile Error: Redefinition) 1. แตกต่างกันแค่ Return Type int func() { return 5; } char func() {

  18. ความแตกต่างระหว่าง size_t และ int ใน C++: คู่มือเลือกใช้ให้ถูกต้อง

    size_t และ int เป็น Signed/Unsigned Integer Types ที่ใช้กันอย่างแพร่หลาย แต่มีความหมายและขนาดต่างกันจริงๆ การใช้ผิดที่อาจนำไปสู่ Bugs ที่หาไม่ออก คำจำกัดความมาตรฐาน คุณสมบัติsize_tint SignednessUnsigned (เสมอ)Signed (เสมอ) ขนาดขั้นต่ำ16-bit16-bit วัตถุประสงค์ขนาด Object / Array Index / Loop Cou

  19. อ่าน Memory Usage ใน Linux ด้วย C++: อ่าน /proc/self/stat

    ใน Linux ข้อมูล Process Memory อยู่ใน Virtual Filesystem /proc/<PID>/stat สำหรับ Process ตัวเองใช้ /proc/self/stat ไฟล์นี้มีข้อมูลมากกว่า 50 Fields เราสนใจ 2 Fields: Vsize (Virtual Memory Size): Field 23 - Virtual Address Space ทั้งหมด (Bytes) RSS (Resident Set Size): Field 24 - Physi

  20. นับจำนวนหลักของจำนวนเต็มใน C++: วิธีแบบคลาสสิกและลอการิทึม

    การนับจำนวนหลัก (Digits) ของจำนวนเต็มใน C++ มีหลักวิธีหลัก 2 แบบ: Iterative Division และ Logarithm แต่ละวิธีมีข้อดีข้อเสียและ Corner Cases ที่ต้องระวัง วิธีที่ 1: Iterative Division (วนลูปหาร 10) เหมาะสำหรับทุก Integer Type รวมถึง 0 และค่าลบ int count_digits_iterative(long long n) { if (n == 0)

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:54/301  20-คอมพิวเตอร์/Page Goto:1 48 49 50 51 52 53 54 55 56 57 58 59 60