مقايضة C ++ Std

Mqaydt C Std



'المبادلة هي عملية تبادل شيئين أو أكثر. يمكن تبديل البيانات بين متغيرين في البرمجة. تبادل الأشياء بين شخصين ممكن في الحياة الواقعية. يمكن تبديل أي قيم كائنين باستخدام وظيفة المكتبة القياسية swap () في C ++. تم وضعه تحت عنوان 'المرافق' في C11. وظيفة swap () في C ++ لها تعقيد N للمصفوفات لأنه يجب تبديل كل عنصر على حدة ، في حين أن صعوبة وظيفة الثوابت ثابتة. تلقي الدالة swap () تحذيرًا أو خطأ في حالة فشل أي من عناصر المتغير. انظر إلى توقيع الوظيفة لـ std :: swap () أدناه:

بناء الجملة:

قالب < فئة T > فارغ تبديل ( تي & متغير_1 و تي & متغير_2 ) ؛

يجب تبديل كل من قيمة المتغير الأول والمتغير الثاني ، وكلاهما قيم تخزين. تقوم الوظيفة فقط بتبديل قيم المتغيرات ؛ ليس لها مخرجات '.







عمل وظيفة swap () في C ++

يتم تنفيذ وظيفة المبادلة في C ++ باستخدام الأسطر الثلاثة التالية.



قالب فارغ تبديل ( تي & أنا و تي & ي ) {
T درجة الحرارة = الأمراض المنقولة جنسيا :: يتحرك ( أنا ) ؛
أنا = الأمراض المنقولة جنسيا :: يتحرك ( ي ) ؛
ي = الأمراض المنقولة جنسيا :: يتحرك ( مؤقت ) ؛
}

العبارة 'T temp = std :: move (i)' ؛ يقوم بعمل نسخة من العنصر 'i' ويكرره. هنا ، 'i = std :: move (j)' ؛ يتجاهل العناصر الأصلية لـ 'i' ويخزن نسخة 'i' من 'j' بدلاً من 'j' الأصلي. الصيغة 'j = std :: move (temp)' ؛ احفظ 'i' بنسخة من temp ، وأزل المحتويات المتطابقة من temp. أيضًا ، احذف متغير temp بعد اكتمال تنفيذ وظيفة swap ().



مثال 1: برنامج باستخدام std :: move Method to Swap

كما هو موضح أدناه ، يمكننا تبديل كائنين باستخدام ميزة C ++ 11 std :: move.





# تضمين

# تضمين <ناقل>



قالب
فارغ تبديل ( تي & أ و تي & ب )
{
T درجة الحرارة = الأمراض المنقولة جنسيا :: يتحرك ( أ ) ؛
أ = الأمراض المنقولة جنسيا :: يتحرك ( ب ) ؛
ب = الأمراض المنقولة جنسيا :: يتحرك ( مؤقت ) ؛
}
int رئيسي ( )
{
الأمراض المنقولة جنسيا :: المتجه قائمة = { 10 و 12 و 13 و خمسة عشر و 16 و 17 } ؛
int أنا = 3 و ي = 5 ؛
تبديل ( قائمة [ أنا ] و قائمة [ ي ] ) ؛
إلى عن على ( int أنا : قائمة ) {
الأمراض المنقولة جنسيا :: كوت << أنا << ' ؛
}
إرجاع 0 ؛ }

لدينا نموذج إعلان يحتوي على كائن 'T'. بعد ذلك ، أنشأنا الوظيفة على أنها 'مقايضة'. تأخذ الوظيفة المعلمتين & a & & b ، من النوع 'T'. كنتيجة للوسيطات T & a و T & b الرجوع إلى عنوان المتغير الذي تم تمريره أو تخزينه والتطبيق مباشرة عليه دون الرجوع ، تسمى وظيفة المبادلة (T & a، T & b) استدعاء من خلال المرجع.



داخل مبادلة الفراغ ، قمنا بتطبيق خوارزمية المبادلة باستخدام طريقة std :: move. ثم قمنا ببناء ملفات البرنامج الرئيسية. هنا ، أعلنا عن المتغير 'list' وقمنا بتهيئته بقائمة القيم الرقمية. لقد قمنا بتعيين قيم 'i' و 'j' للمبادلة. تم استبدال القيمة الرقمية الموجودة في الفهرس الثاني بالقيمة الرقمية في الفهرس الخامس. ثم قمنا باستدعاء دالة المبادلة وقمنا بتمرير الفهارس 'i' و 'j' إليها للمبادلة. تُستخدم حلقة for لطباعة القائمة التي تم تبديلها.

عرض الإخراج القائمة المعدلة. يمكنك ملاحظة القائمة الجديدة التي تم إنشاؤها ومبادلة القيمة وفقًا لفهارس محددة.

مثال 2: برنامج باستخدام طريقة std :: swap للتبديل

يعد استخدام آلية std :: swap الموجودة في رأس الأداة المساعدة (في C ++ 11) هو الإصلاح المعتاد. يتم تبديل قيم كائنين لجعلها تعمل.

# تضمين

# تضمين <ناقل>

#include



int رئيسي ( )
{
الأمراض المنقولة جنسيا :: فكتورار = { 3 و 6 و 9 و خمسة عشر و 13 } ؛
int أنا = 3 و ي = 4 ؛

الأمراض المنقولة جنسيا :: تبديل ( arr [ أنا ] و arr [ ي ] ) ؛

إلى عن على ( int أنا : arr ) {
الأمراض المنقولة جنسيا :: كوت << أنا << ' ؛
}

إرجاع 0 ؛
}

من خلال استيراد ملف الرأس ، يمكننا الوصول إلى وظيفة المبادلة في برنامجنا. هنا ، قمنا بتضمين ملف الرأس مع مكتبتين أكثر أهمية. بعد ذلك ، أنشأنا الطريقة الرئيسية int. داخل البرنامج الرئيسي ، أعلنا عن المتجه بإنشاء المتغير 'arr'. تتم تهيئة المتغير 'arr' بالعناصر الخمسة للعدد الصحيح. يتم تعيين مواضع الفهرس إلى 'i' و 'j' للتبديل. ثم يتم تمرير المتغيرين 'i' و 'j' إلى طريقة std :: swap لمبادلة قيمة الفهرس المحدد. باستخدام الحلقة for ، قمنا بطباعة المصفوفات المبادلة.

يتم عرض القائمة التي تم الحصول عليها بعد عملية المبادلة باستخدام طريقة std :: swap على النحو التالي:

مثال 3: برنامج باستخدام أسلوب std :: iter_swap للتبديل

يعد استخدام خوارزمية std :: iter_swap ، المدرجة في رأس الخوارزمية ، خيارًا إضافيًا. الطريقة التي تعمل بها هي تبديل قيم الكائنات التي يشير إليها التكرارات المقدمة.

# تضمين

# تضمين <ناقل>

# تضمين

# تضمين <الخوارزمية>



int رئيسي ( )
{
الأمراض المنقولة جنسيا :: ناقلات = { 64 و 61 و 62 و 63 و 60 } ؛
int أنا = 0 و ي = 4 ؛
تلقاءي itr1 = الأمراض المنقولة جنسيا :: التالي ( شيء. يبدأ ( ) و أنا ) ؛
تلقاءي itr2 = الأمراض المنقولة جنسيا :: التالي ( شيء. يبدأ ( ) و ي ) ؛

الأمراض المنقولة جنسيا :: iter_swap ( itr1 و itr2 ) ؛
إلى عن على ( int أنا : شيء ) {
الأمراض المنقولة جنسيا :: كوت << أنا << ' ؛
}
إرجاع 0 ؛
}

بالنسبة للطريقة الرئيسية للبرنامج ، أعلنا عن متغير متجه 'vec' وقمنا بتعيينه قائمة متجه من الأرقام. ثم حددنا موضع الفهرس للمتغير 'i' و 'j'. يتم استدعاء الأسلوب std :: iter_swap الذي يأخذ iter1 و iter2 كوسيطة. يتم التصريح عن كل من iter1 و iter2 بالكلمة الأساسية التلقائية ولديهما عملية التكرار. طريقة الحلقة for تطبع القيم المبادلة لمصفوفة المتجه عند التنفيذ.

نجحت طريقة std :: iter_swap في تبديل قيم المتجهات المحددة.

مثال 4: برنامج استخدام بدون متغيرات مؤقتة للمبادلة

يوضح هذا المثال طريقة جديدة لمبادلة الأرقام في كود C ++ دون استخدام المتغيرات المؤقتة.

# تضمين

استخدام اسم للمحطة ؛

int رئيسي ( )
{
int x1 = اثنين و x2 = 12 ؛
كوت << 'قبل المبادلة'. << endl ؛
كوت << 'x1 =' << x1 << ', x2 = ' << x2 << endl ؛

x1 = x1 + x2 ؛
    x2 = x1 - x2 ؛
x1 = x1 * x2 ؛

كوت << ' بعد المبادلة '. << endl ؛
كوت << 'x1 =' << x1 << ', x2 = ' << x2 << endl ؛

إرجاع 0 ؛ }

دعونا نفحص تشغيل هذا البرنامج. هنا ، أعلنا عن x1 و x2 ، اللذين تم ضبطهما في البداية بالرقم ، على التوالي. ثم ، باستخدام الصيغة x1 = x1 + x2 ، نضيف x1 و x2 ونضع النتيجة في x1. يشير هذا إلى أن x1 يساوي 2 زائد 12. لذلك ، الآن يساوي 14. ثم نطبق الصيغة x2 = x1 - x2. يشير هذا إلى أن x2 = 14 - 12. لذلك ، فإن x2 الآن تساوي 2. مرة أخرى ، نطبق الصيغة x1 = x1 - x2. يشير هذا إلى أن x1 = 14 - 2. لذلك ، x1 = 12 في النهاية. نتيجة لذلك ، تم تبديل الأرقام.

يتم عرض الرقم الذي تم تبديله قبل وبعد على شاشة المطالبة التالية.

استنتاج

هنا ، نراجع وصفًا كاملاً لـ swap () في C ++ ، واستخدامه ، وبعض الأمثلة التي توضح كيفية عمله. باستخدام وظيفة std :: swap () ، يمكن تبديل قيم متغيرين. تتضمن C ++ STL وظيفة مضمنة تسمى std :: swap (). يتم أيضًا شرح استدعاءات دالة المبادلة (T & متغير 1 ، T & متغير 2) حسب المرجع ، ومبادلة C ++ overloads () اعتمادًا على نوع متغيرات البيانات في هذا البرنامج التعليمي.