0Pricing
C++ Academy · บทเรียน

Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges

ใช้ concepts จากไลบรารีมาตรฐาน เช่น integral และ ranges::range

Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ไลบรารีแนวคิดมาตรฐาน

C++20 เพิ่มแนวคิดมาตรฐานจำนวนมากใน <concepts> และ <ranges> การรู้จักแนวคิดเหล่านี้ช่วยลดการเขียนแนวคิดขึ้นเอง

แนวคิดพื้นฐานของภาษา

แนวคิดพื้นฐาน:

  • std::same_as<T, U>
  • std::derived_from<T, U>
  • std::convertible_to<T, U>
  • std::common_with<T, U>
  • std::assignable_from<T, U>

แนวคิดทางคณิตศาสตร์

จำกัดให้ใช้กับชนิดตัวเลข:

  • std::integral — ชนิดจำนวนเต็มใด ๆ
  • std::signed_integral — จำนวนเต็มมีเครื่องหมาย
  • std::unsigned_integral — จำนวนเต็มไม่มีเครื่องหมาย
  • std::floating_point — float, double, long double
template <std::floating_point T>
T mean(T a, T b) { return (a + b) / 2; }

แนวคิดด้านการเปรียบเทียบ

กำหนดข้อจำกัดให้ชนิดสำหรับการตรวจสอบความเท่ากันและการจัดลำดับ:

  • std::equality_comparable
  • std::totally_ordered
  • std::three_way_comparable

แนวคิดเกี่ยวกับออบเจ็กต์

ข้อกำหนดทั่วไป:

  • std::movable
  • std::copyable
  • std::default_initializable
  • std::semiregular
  • std::regular
template <std::regular T>
class Container { /* full-fledged value type */ };

แนวคิดเกี่ยวกับสิ่งที่เรียกใช้ได้

สำหรับฟังก์ชันและฟังก์เตอร์:

  • std::invocable<F, Args...>
  • std::regular_invocable<F, Args...>
  • std::predicate<F, Args...>
template <std::invocable<int> F>
void apply_to_42(F&& f) {
    std::forward<F>(f)(42);
}

แนวคิดเกี่ยวกับตัววนซ้ำ

ใน <iterator>:

  • std::input_iterator
  • std::forward_iterator
  • std::bidirectional_iterator
  • std::random_access_iterator
  • std::contiguous_iterator

แนวคิดเกี่ยวกับช่วง (C++20)

จาก <ranges>:

  • std::ranges::range — มี begin/end
  • std::ranges::view — ช่วงที่ไม่ได้เป็นเจ้าของข้อมูล
  • std::ranges::sized_range — ทราบขนาดของตนเองในเวลา O(1)
  • std::ranges::random_access_range
template <std::ranges::range R>
auto first(R&& r) {
    return *std::ranges::begin(r);
}

การผสานแนวคิด

ผสมแนวคิดเพื่อแสดงข้อกำหนดที่แม่นยำ

template <std::ranges::random_access_range R>
    requires std::integral<std::ranges::range_value_t<R>>
auto sum(const R& r) {
    return std::reduce(std::ranges::begin(r), std::ranges::end(r));
}

แนวคิดแบบกำหนดเองบนพื้นฐานแนวคิดมาตรฐาน

สร้างแนวคิดเฉพาะโดเมนบนพื้นฐานของแนวคิดมาตรฐาน

template <typename T>
concept Number = std::integral<T> || std::floating_point<T>;

อัลกอริทึมที่ใช้แนวคิดเป็นข้อกำกับ

อัลกอริทึมช่วงของ C++20 มีข้อจำกัดจากแนวคิดอย่างเข้มงวด เมื่อคุณส่งชนิดที่ไม่เหมาะสม ข้อความแสดงข้อผิดพลาดจะระบุโดยตรงว่าแนวคิดใดไม่ผ่าน

สรุปย่อ

ใช้แนวคิดในตัวเมื่อทำได้:

  • ตัวเลข → integral / floating_point
  • การวนซ้ำ → ranges::range
  • สิ่งที่เรียกใช้ได้ → invocable / predicate
  • ชนิดค่า → regular หรือ semiregular

ตรวจสอบอย่างรวดเร็ว

แนวคิดมาตรฐานใดอธิบายชนิดที่มีทั้ง begin() และ end()

สรุปทบทวน

ไลบรารีมาตรฐานมีไลบรารีแนวคิดที่หลากหลาย ได้แก่ แนวคิดทางคณิตศาสตร์ (integral, floating_point) แนวคิดที่เปรียบเทียบได้ (equality_comparable) แนวคิดเกี่ยวกับออบเจ็กต์ (movable, regular) แนวคิดเกี่ยวกับสิ่งที่เรียกใช้ได้ ตัววนซ้ำ และช่วง ใช้แนวคิดเหล่านี้เป็นพื้นฐานสำหรับข้อจำกัดของคุณเอง

คำถามที่พบบ่อย

บทเรียน “Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges”

ใช้ concepts จากไลบรารีมาตรฐาน เช่น integral และ ranges::range คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงใช้ Concepts แทน SFINAE
  2. การกำหนด Concepts ด้วย requires
  3. การใช้ Concepts ในเทมเพลตและ auto
  4. Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges
← กลับไปที่ C++ Academy