سؤال

لدي بعض رمز C ، حيث يوجد في قائمتين مرتبطتين (على سبيل المثال A و B) ويتم إدراج A في وضع معين في B و A لا يزال لديه عناصر.

كيف يمكنني محاكاة نفس السلوك بشكل فعال باستخدام C ++ STL؟ إذا حاولت لصق ، فإنه يجعل الثاني فارغًا.

شكرا ، جوكول.

هل كانت مفيدة؟

المحلول

تحتاج إلى نسخ العناصر. النظر في شيء مثل هذا:

std::copy(a.begin(), a.end(), std::inserter(b, b_iterator));

إذا كنت تريد نفس العقد التي تتقاسمها قائمتين ، فهذا ببساطة غير مدعوم من قبل std::list (حاويات STL لها دائمًا ملكية حصرية). يمكنك تجنب تكرار العناصر عن طريق تخزين المؤشرات في القائمة ، أو باستخدام boost::ptr_list, ، التي تخزن داخليًا المؤشرات ولكنها تقدم واجهة برمجة تطبيقات أجمل.

نصائح أخرى

حاول الإدراج:

B.insert( position, A.begin(), A.end() );

لإدراج نسخ من عناصر A في B قبل "الموقف". يبقى نفسه دون تغيير. انظر الى هذا حلقة الوصل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top