مرحبا مرة اخرى تم إعداد ترجمة المواد التالية خصيصًا لطلاب الدورة التدريبية
"C ++ Developer" ، الفصول التي ستبدأ في 27 يونيو.

تم اعتماد مكتبة النطاقات في C ++ 20 في اجتماع للجنة القياسية في سان دييغو في نوفمبر الماضي. توفر المكتبة مكونات لمعالجة نطاقات القيم المصممة لتبسيط التعليمات البرمجية الخاصة بنا. لسوء الحظ ، مكتبة Ranges غير موثقة جيدًا ، مما يجعل من الصعب فهمها بالنسبة لأولئك الذين يرغبون في تعلمها. يهدف هذا المنشور إلى تقديم أمثلة على الكود المكتوب باستخدام النطاقات وبدونها.
تطبيق مكتبة إريك نيبلر رينجز متوفر
هنا . إنه يعمل مع Clang 3.6.2 أو الأحدث ، gcc 5.2 أو الأحدث ، و VC ++ 15.9 أو الأحدث. تمت كتابة أمثلة التعليمات البرمجية أدناه واختبارها باستخدام أحدث إصدارات المترجمات. تجدر الإشارة إلى أن هذه الأمثلة هي تطبيقات نموذجية وليست بالضرورة الحلول الوحيدة التي يمكنك التوصل إليها.
على الرغم من أن مساحة الاسم القياسية لمكتبة النطاقات هي
std::ranges
، إلا أنه في تطبيق المكتبة الحالي هذا هو
ranges::v3
.
يتم استخدام الأسماء المستعارة مساحة الاسم التالية في الأمثلة أدناه:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
أيضًا ، للتبسيط ، سنشير إلى الكائنات والوظائف و lambdas التالية:
std::string to_roman(int value) { std::vector<std::pair<int, char const*>> roman { { 1000, "M" },{ 900, "CM" }, { 500, "D" },{ 400, "CD" }, { 100, "C" },{ 90, "XC" }, { 50, "L" },{ 40, "XL" }, { 10, "X" },{ 9, "IX" }, { 5, "V" },{ 4, "IV" }, { 1, "I" } }; std::string result; for (auto const & [d, r]: roman) { while (value >= d) { result += r; value -= d; } } return result; } std::vector<int> v{1,1,2,3,5,8,13,21,34}; auto print_elem = [](auto const e) {std::cout << e << '\n'; }; auto is_even = [](auto const i) {return i % 2 == 0; };
التاريخ : أود أن أشكر إريك نيبلر وأي شخص آخر علق أدناه ، مع اقتراحات لأمثلة الكود هذه. لقد قمت بتحديث عدد قليل بناءً على تقييماتهم.اطبع كل عناصر النطاق:
اطبع كل عناصر النطاق بالترتيب العكسي:
قم بطباعة العناصر الزوجية للنطاق فقط ، لكن بترتيب عكسي:
تخطي أول عنصرين من النطاق وطباعة فقط حتى من العناصر الثلاثة التالية:
طباعة الأرقام من 101 إلى 200:
اطبع جميع الأرقام الرومانية من 101 إلى 200. لتحويل رقم إلى الرقم الروماني المقابل ، استخدم الدالة
to_roman()
الموضحة أعلاه.
اطبع الأرقام الرومانية لآخر ثلاثة أرقام قابلة للقسمة على 7 في النطاق [101 ، 200] ، بترتيب عكسي.
أنشئ مجموعة من السلاسل التي تحتوي على الأرقام الرومانية للأرقام الثلاثة الأخيرة وهي مضاعفات 7 في النطاق [101 ، 200] ، بترتيب عكسي.
قم بتغيير النطاق غير المصنف بحيث يحتفظ بقيم فريدة فقط ، ولكن بالترتيب العكسي.
احذف القيمتين الأصغر والثاني في النطاق واترك الباقي مرتبًا في النطاق الثاني.
الجمع بين جميع الصفوف في نطاق معين في قيمة واحدة.
حساب عدد الكلمات (مفصولة بمسافة) في النص.
هل كانت المقالة مفيدة لك؟ اكتب في التعليقات.