كيف أكتب لحلقة التي بالتكرار عبر CAtlMap حذف عناصر انتقائي لأنه غني؟
سؤال
وأنا أحاول القيام بما يلي دون الكثير من كود حالة خاصة للتعامل مع المواقف يبطل الخ:
ما هي أفضل طريقة لملء الفراغات؟
void DeleteUnreferencedRecords(CAtlMap<Record>& records)
{
for(____;____;____)
{
if( NotReferencedElsewhere(record) )
{
// Delete record
_______;
}
}
}
المحلول
ووفقا لهذه:
http://msdn.microsoft.com/ أون لنا / مكتبة / 0h4c3zkw (VS.80) .aspx اتصال
وRemoveAtPos ديه هذه دلالات
<اقتباس فقرة>ويزيل الزوج مفتاح / القيمة المخزنة في الموضع المحدد. يتم تحرير الذاكرة المستخدمة لتخزين العنصر. الموقف المشار إليه بواسطة نقاط البيع يصبح غير صالح، وبينما لا يزال الموقف من أية عناصر أخرى في خريطة صحيحة، فإنها لا تحتفظ بالضرورة بنفس الترتيب.
اقتباس فقرة>والمشكلة هي أن النظام يمكن أن يتغير - وهو ما يعني أن GetNext () لن تستمر حقا التكرار. يبدو أنك بحاجة لجمع المواقف التي تريد حذفها في مرور واحد وحذفها في القرن المقبل. إزالة الموقف لا يفسد الكائنات الموقف أخرى
نصائح أخرى
وأول أفكاري سيكون إنقاذ الموقف الحالي قبل استدعاء GetNext
، ثم، إذا قمت بحذف العنصر يمكنك إعادة تعيينها. ومع ذلك، ربما الطريق الأسلم سيكون لإنشاء خريطة جديدة تحتوي على العناصر التي تريد الاحتفاظ بها، وإلا هل يمكن أن يكون الاعتماد على الكيفية التي يعمل تطبيق داخلي الموقف.
وأنا لست على دراية جدا مع CAtlMap
، ولكن لو كان مماثلا لنوع map
المحكمة الخاصة بلبنان، ثم <وأ href = "https://stackoverflow.com/questions/197121/how-do-i-write-a- للحلقة التي بالتكرار-الإفراط واحد في catlmap-انتقائي-حذف-ايلى # 197209 "> روب" كان يعتقد من قبل " آمنة - حذف عنصر لا يؤثر على أي المكررات ما عدا واحدة (الصورة) لافتا إلى العنصر الذي يتم حذفها.