"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إزالة العناصر بأمان من std::vector أثناء التكرار؟

كيفية إزالة العناصر بأمان من std::vector أثناء التكرار؟

تم النشر بتاريخ 2024-11-14
تصفح:875

How to Safely Remove Elements from a std::vector While Iterating?

إزالة العناصر بكفاءة من std::vector أثناء التكرار

في عالم برمجة C، غالبًا ما يواجه المطورون التحدي المتمثل في التعامل مع std ::المتجه أثناء اجتياز عناصره. في حين أن التكرارات توفر آلية مناسبة لهذه المهمة، إلا أن هناك خطأ شائع ينشأ عند محاولة إزالة العناصر أثناء التكرار.

ضع في اعتبارك السيناريو حيث يتم استخدام std::vector<:string> لتخزين قائمة من العناصر المسارات إلى الملفات. الهدف هو حذف كل ملف وإزالة مساره من المتجه. ومع ذلك، فإن استخدام الطرق التقليدية، مثل طريقة المسح ()، يؤدي إلى إبطال المكررات بعد كل عملية حذف، مما يزيد من تعقيد عملية الاجتياز.

للتغلب على هذا القيد، ابتكر المطورون نهجًا أكثر كفاءة. عند استدعاء الطريقة ()ase، لا تقوم بإزالة العنصر المعين فحسب، بل تقوم أيضًا بإرجاع مكرر جديد يشير إلى العنصر التالي. يسمح هذا السلوك الفريد بالاستمرار السلس للحلقة:

std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
          iter;
}

في مقتطف الكود هذا، تستمر الحلقة على النحو المنشود، مع تحديث التكرار تلقائيًا للإشارة إلى العنصر الصالح التالي بعد كل عملية حذف. تلغي هذه الطريقة الفعالة الحاجة إلى ناقل إضافي وتبسط عملية إزالة العناصر أثناء التكرار.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3