بينما من الشائع أن std::vector يعمل بشكل مشابه للمصفوفات، إلا أن الاختبارات الأخيرة تحدت هذه الفكرة. في هذه المقالة، سنفحص اختلافات الأداء بين المصفوفات std::vector والمصفوفات العادية ونلقي الضوء على الأسباب الأساسية.
لإجراء الاختبارات، تم تنفيذ معيار يتضمن إنشاء مصفوفات كبيرة وتعديلها بشكل متكرر من كائنات البكسل. تم إجراء الاختبارات باستخدام تطبيقين: std::vector والمؤشرات الأولية التي تحاكي المصفوفات العادية.
كشفت النتائج الأولية عن فجوة كبيرة في الأداء، حيث كون std::vector أبطأ بحوالي 3-4 مرات من المصفوفات العادية.
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
دفع هذا الاكتشاف المفاجئ إلى إجراء فحص دقيق للكود. تم اكتشاف أن الاختلاف الواضح في الأداء ينبع من حقيقة أن تعديل عنصر في المتجه يتطلب الوصول إليه مرتين: مرة لتغيير حجم المتجه ومرة أخرى لتهيئة العنصر.
من خلال تحسين تطبيق المتجه لتهيئة كل عنصر. العنصر مرة واحدة فقط، حصلنا على أداء محسّن بشكل كبير:
UseVector completed in 2.216 seconds
أصبح هذا الأداء المنقح الآن مشابهًا لأداء المصفوفات العادية. من المهم أن نلاحظ أن الاختلاف الطفيف الملحوظ يمكن أن يعزى إلى عوامل لا علاقة لها ببنية البيانات الأساسية.
في الختام، في حين أن std::vector عبارة عن بنية بيانات مريحة ومتعددة الاستخدامات، إلا أن أدائها يمكن أن يتأثر بالعوامل. مثل الطريقة التي تتم بها تهيئة العناصر والوصول إليها. عندما يكون الأداء أمرًا بالغ الأهمية، فمن الحكمة التفكير بعناية في المتطلبات المحددة واستكشاف الخيارات البديلة مثل المصفوفات البسيطة أو هياكل البيانات الأخرى.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3