0Pricing
C++ Academy · درس

مقدمة إلى مكتبة Ranges في C++20

استخدم خوارزميات std::ranges التي تتلقى نطاقات بدلًا من أزواج المكرّرات.

مقدمة إلى مكتبة Ranges في C++20 درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

لماذا النطاقات؟

تأخذ STL التقليدية زوجًا من المكرّرات (v.begin(), v.end()). أما نطاقات C++20 فتأخذ قيمة نطاق واحدة وتضيف قابلية التركيب.

تضمين النطاقات

ضمّن <ranges>. مساحة الأسماء std::ranges مخصصة للخوارزميات، وstd::views للعروض الكسولة.

#include <ranges>
#include <algorithm>

خوارزميات النطاقات

لكل خوارزمية قياسية نظير ضمن ranges يأخذ نطاقًا بدلًا من مكرّرين.

std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v);             // sort the whole range
auto it = std::ranges::find(v, 4);

دوال الإسقاط

تقبل خوارزميات النطاقات إسقاطًا اختياريًا — وهو دالة تُطبَّق على كل عنصر قبل المقارنة. وبذلك تتجنب كتابة مقارنات مخصصة.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparison

ما هو النطاق؟

النطاق هو أي شيء يدعم begin() وend(). ويشمل ذلك الحاويات والمصفوفات، وكذلك أي نوع مخصص في C++20 يوفّر قيمة حارسة.

القيم الحارسة

تعمّم C++20 الدالة end() إلى قيمة حارسة، ولا يلزم أن تكون من النوع نفسه الذي ينتمي إليه المكرّر. وهذا مفيد لتدفقات الإدخال والنطاقات اللانهائية.

العروض: مسارات النطاقات الكسولة

العرض view هو نطاق غير مالك ينتج العناصر عند الطلب. كوّن العروض باستخدام عامل الأنبوب |.

auto squares = v
    | std::views::filter([](int x) { return x % 2 == 0; })
    | std::views::transform([](int x) { return x * x; });

for (int x : squares) std::cout << x << " ";

التقييم الكسول

لا تخصص العروض الذاكرة ولا تُنفَّذ حتى يبدأ التكرار عليها. ينتج filter | transform | take(5) أول 5 قيم محوَّلة فقط، ولا ينتج أي شيء إضافي.

النطاقات المستعارة ومدة الحياة

تستعير العروض نطاق المصدر الخاص بها. فإذا انتهى عمر المصدر، أصبح العرض معلّقًا. كن حذرًا عند استخدام العروض مع الكائنات المؤقتة، رغم أن C++20 أضافت وسائل حماية.

الفوري مقابل الكسول

تنتج الخوارزميات النتائج بصورة فورية (تحسبها الآن). أما العروض فكسولة (تحسبها أثناء التكرار). اختر بينهما بناءً على حاجتك إلى تجسيد النتيجة.

الأداء

تتجنب المسارات الكسولة إنشاء حاويات وسيطة. وغالبًا ما يحسّن المترجم المسارات كما لو كانت حلقة واحدة. افحص ذلك باستخدام godbolt للتحقق.

مسار الترحيل

إذا لم تتمكن من استخدام C++20، توفر مكتبات مثل range-v3 من Eric Niebler النموذج نفسه في C++14/17. ويستحق تعلمه اليوم لتسهيل الترحيل.

اختبار سريع

ما الميزة الأساسية لنطاقات C++20 مقارنة بأسلوب STL التقليدي القائم على زوج من المكرّرات؟

مراجعة

تحدّث نطاقات C++20 خوارزميات STL — مرّر نطاقًا واحدًا، واستخدم الإسقاطات، وأنشئ مسارات كسولة باستخدام العروض. ويتيح عامل الأنبوب تركيب المرشحات والتحويلات والعمليات take في شيفرة واضحة وتصريحية.

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

هل درس «مقدمة إلى مكتبة Ranges في C++20» مجاني؟

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

ماذا ستتعلم في «مقدمة إلى مكتبة Ranges في C++20»؟

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

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

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

كم من الوقت يستغرق درس «مقدمة إلى مكتبة Ranges في C++20»؟

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

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

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

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

  1. فئات المكرّرات: input وforward وbidirectional وrandom
  2. أنماط المكرّرات الشائعة: ‏begin وend وadvance
  3. مقدمة إلى مكتبة Ranges في C++20
  4. محوّلات النطاقات: ‏views::filter وviews::transform وviews::take
← العودة إلى C++ Academy