0Pricing
C++ Academy · درس

الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace

حوّل العناصر ورشّحها واستبدلها باستخدام الخوارزميات القياسية.

الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

الخوارزميات المعدِّلة

تكتب هذه الخوارزميات إلى نطاق إخراج، إما في المكان نفسه أو عبر مكرّر وجهة.

std::copy

انسخوا نطاقًا إلى نطاق آخر. ويجب أن يكون نطاق الإخراج كبيرًا بما يكفي، أو عليكم توفير مُدرج.

#include <algorithm>
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));

std::copy_if

انسخوا العناصر التي تطابق مسندًا.

std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
    std::back_inserter(evens),
    [](int x) { return x % 2 == 0; });

std::transform

طبّقوا دالة على كل عنصر واكتبوا النتيجة. وهي شبيهة بـ map في اللغات الأخرى.

std::vector<int> v = {1, 2, 3};
std::vector<int> sq;
std::transform(v.begin(), v.end(),
    std::back_inserter(sq),
    [](int x) { return x * x; });
// sq is {1, 4, 9}

transform بنطاقين

ادمجوا نطاقي إدخال باستخدام دالة ثنائية.

std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> sum;
std::transform(a.begin(), a.end(), b.begin(),
    std::back_inserter(sum), std::plus<int>{});
// sum is {11, 22, 33}

std::replace وstd::replace_if

استبدلوا في المكان نفسه العناصر التي تساوي قيمة معينة، أو التي تطابق مسندًا.

std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}

std::fill

عيّنوا كل عنصر في نطاق إلى قيمة معينة.

std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}

std::generate

عيّنوا كل عنصر إلى نتيجة استدعاء دالة. ويفيد ذلك في إنشاء التسلسلات.

std::vector<int> v(5);
int n = 0;
std::generate(v.begin(), v.end(), [&]() { return n++; });
// v is {0, 1, 2, 3, 4}

std::iota

من الترويسة <numeric> — تملأ نطاقًا بقيم متزايدة بالتتابع.

#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}

std::reverse

اعكس عناصر نطاق موضعيًا.

std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}

std::rotate

دوِّر العناصر بحيث يصبح العنصر عند middle هو الأول الجديد. وينتقل الأول الأصلي إلى نهاية المنطقة المدارة.

اصطلاح المحو والإزالة باستخدام std::remove

تنقل remove العناصر غير المرغوب فيها إلى الخلف وتعيد مكرّرًا يشير إلى النهاية المنطقية الجديدة. اقرنها بـ erase لتقليص الحاوية فعليًا.

v.erase(
    std::remove(v.begin(), v.end(), 0),
    v.end()
);

اختبار سريع

أي خوارزمية تلائم تطبيق دالة على كل عنصر وإنشاء حاوية جديدة؟

مراجعة

تكتب الخوارزميات المعدِّلة النتائج: copy وcopy_if وtransform وreplace وfill وgenerate وiota وreverse وrotate، بالإضافة إلى اصطلاح المحو والإزالة.

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

هل درس «الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace» مجاني؟

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

ماذا ستتعلم في «الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace»؟

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

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

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

كم من الوقت يستغرق درس «الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace»؟

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

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

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

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

  1. الخوارزميات غير المعدِّلة: ‏find وcount وall_of
  2. الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace
  3. الفرز والتقسيم: ‏sort وstable_partition
  4. الخوارزميات الرقمية: ‏accumulate وreduce وtransform_reduce
← العودة إلى C++ Academy