مكتبة range-v3 في C++: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة عن range-v3: ما هي ولماذا تحتاجها

مكتبة range-v3 هي مكتبة حديثة وقوية للتعامل مع تسلسلات البيانات في لغة C++، طورها إريك نيبيلر (Eric Niebler). كانت هذه المكتبة النموذج الأولي والمصدر الرئيسي للمكتبة القياسية C++20 Ranges. توفر range-v3 أدوات سهلة ومعبرة وآمنة لمعالجة المجموعات والمتجهات والقوائم وأي كائنات قابلة للتكرار، باستخدام مفهوم "الحسابات الكسولة" وتجميع الخوارزميات.

لماذا تحتاج هذه المكتبة؟ الخوارزميات التقليدية في STL (مثل std::transform و std::copy_if) تعمل مع المؤشرات التكرارية (iterators)، مما يؤدي غالباً إلى كود ضخم ويصعب قراءته. تحل range-v3 هذه المشكلة بالسماح لك بالعمل مع نطاقات كاملة (ranges) ككائنات واحدة. يمكنك ربط العمليات في سلسلة (pipeline) دون إنشاء حاويات مؤقتة، وكتابة كود يبدو كسلسلة من الخطوات بدلاً من استدعاءات دوال متداخلة.

المزايا الرئيسية:

  • التعبيرية: يصبح الكود أشبه بوصف تصريحي لما تريد فعله، وليس كيفية فعله.
  • الكسل (Laziness): العديد من العمليات (التصفية، التحويل) تُنفذ فقط عند الحاجة الفعلية، مما يحسن الأداء.
  • التركيب: سهولة دمج الخوارزميات المختلفة باستخدام عامل الأنبوب | (pipe).
  • الأمان: أخطاء أقل تتعلق بتجاوز الحدود والاستخدام الخاطئ للمؤشرات التكرارية.
  • التوافق: يعمل مع أي حاويات STL وأنواع مخصصة تدعم التكرار.

تثبيت مكتبة range-v3

على عكس Python أو JavaScript، لا يوجد في C++ مدير حزم موحد مثل pip أو npm. لكن range-v3 هي مكتبة header-only (تتكون فقط من ملفات الرأس)، مما يجعل تثبيتها بسيطاً جداً.

الطريقة 1: Vcpkg (موصى به لنظام ويندوز، لينكس، ماك)

Vcpkg هو مدير حزم متعدد المنصات للغة C++.

# قم بتثبيت vcpkg إذا لم تكن قد فعلت ذلك من قبل
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # أو bootstrap-vcpkg.bat لويندوز

# قم بتثبيت range-v3
./vcpkg install range-v3

# قم بتوصيلها في مشروعك (CMake):
# find_package(range-v3 CONFIG REQUIRED)
# target_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)

الطريقة 2: Conan

Conan هو مدير حزم شائع آخر.

# قم بتثبيت Conan
pip install conan

# أضف إلى ملف conanfile.txt:
[requires]
range-v3/0.12.0

[generators]
cmake

# ثم في CMakeLists.txt:
# find_package(range-v3 CONFIG REQUIRED)
# target_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)

الطريقة 3: التثبيت اليدوي (تنزيل ونسخ)

نظراً لأن المكتبة هي header-only، يمكنك ببساطة تنزيلها من GitHub وإضافة المسار إلى مجلد include في مشروعك.

git clone https://github.com/ericniebler/range-v3.git
# ثم في إعدادات المترجم، أضف:
# -I /path/to/range-v3/include

الطريقة 4: CMake FetchContent (الطريقة الحديثة)

هذه الطريقة تقوم بتحميل المكتبة تلقائياً أثناء عملية البناء.

include(FetchContent)
FetchContent_Declare(
  range-v3
  GIT_REPOSITORY https://github.com/ericniebler/range-v3.git
  GIT_TAG 0.12.0
)
FetchContent_MakeAvailable(range-v3)

target_link_libraries(my_project PRIVATE range-v3::range-v3 range-v3::meta)

بداية سريعة: المثال الأول

لنكتب برنامجاً بسيطاً يوضح الإمكانيات الأساسية لـ range-v3. سننشئ متجهاً من الأرقام، ونصفّي الأرقام الزوجية، ونضربها في 2، ثم نطبع النتيجة.

#include <iostream>
#include <vector>
#include <range/v3/all.hpp>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8,                    

توصيات