मान लीजिए मेरे पास एक एसटीएल मानचित्र है जहां मान पॉइंटर्स हैं, और मैं उन्हें सभी को हटाना चाहता हूं। मैं निम्नलिखित कोड का प्रतिनिधित्व कैसे करूं, लेकिन std :: for_each का उपयोग कर रहा हूं? बूस्ट का उपयोग करने के लिए समाधान के लिए मैं खुश हूं।मैं एसटीएल मानचित्र में प्रत्येक मान को हटाने के लिए for_each का उपयोग कैसे करूं?
for(stdext::hash_map<int, Foo *>::iterator ir = myMap.begin();
ir != myMap.end();
++ir)
{
delete ir->second; // delete all the (Foo *) values.
}
(मैं बूस्ट के checked_delete
पाया है, लेकिन मुझे यकीन है कि कैसे pair<int, Foo *>
कि इटरेटर का प्रतिनिधित्व करता है कि लागू करने के लिए नहीं कर रहा हूँ)।
(इसके अलावा, इस प्रश्न के प्रयोजनों के लिए, इस तथ्य को अनदेखा करें कि एक एसटीएल कंटेनर में हटाने की आवश्यकता वाले कच्चे पॉइंटर्स को संग्रहीत करना बहुत समझदार नहीं है)।
नोट: मैंने बाद में एक पंक्ति का उत्तर पाया और सूचीबद्ध किया है ... लेकिन कोड बहुत भयानक है इसलिए मैंने जीएमएन के स्वीयर जवाब को स्वीकार कर लिया है।
struct second_deleter
{
template <typename T>
void operator()(const T& pX) const
{
delete pX.second;
}
};
std::for_each(myMap.begin(), myMap.end(), second_deleter());
आप को बढ़ावा देने का उपयोग कर रहे हैं, तो आप भी लैम्ब्डा पुस्तकालय इस्तेमाल कर सकते हैं:
आपके पुनरावर्तक पर प्रीइंक्रमेंट ऑपरेशन का अच्छा उपयोग! –