0Pricing
C++ Academy · درس

المفاهيم القياسية الشائعة: Integral وRanges

استخدم مفاهيم المكتبة القياسية مثل integral وranges::range.

المفاهيم القياسية الشائعة: Integral وRanges درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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، ومفاهيم الاستدعاء والمكررات والنطاقات. استخدمها أساسًا لقيودك الخاصة.

الأسئلة الشائعة

هل درس «المفاهيم القياسية الشائعة: Integral وRanges» مجاني؟

نعم — نص درس «المفاهيم القياسية الشائعة: Integral وRanges» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «المفاهيم القياسية الشائعة: Integral وRanges»؟

استخدم مفاهيم المكتبة القياسية مثل integral وranges::range. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «المفاهيم القياسية الشائعة: Integral وRanges»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا نستخدم Concepts بدلًا من SFINAE
  2. تعريف Concepts باستخدام requires
  3. استخدام Concepts في القوالب وauto
  4. المفاهيم القياسية الشائعة: Integral وRanges
← العودة إلى C++ Academy