ठीक है, मुझे उम्मीद है कि मैंने यहां एक गूंगा गलती की है। मेरे पास DisplayDevice3d की एक सूची है और प्रत्येक DisplayDevice3d में DisplayMode3d की एक सूची है। मैं DisplayDevice3d की सूची से सभी आइटम को हटाना चाहता हूं जिसमें कोई DisplayMode3d नहीं है। मैं भले ही MyDisplayDevices में 6 DisplayMode3d के से बाहर है, केवल 1 इसके मोड संग्रह में किसी भी DisplayMode3d की है, एक लैम्ब्डा उपयोग करने के लिए यह करने के लिए कोशिश कर रहा हूँ यानी .:std :: remove_if - lambda, संग्रह से कुछ भी नहीं हटा रहा
// If the device doesn't have any modes, remove it.
std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(),
[](DisplayDevice3d& device)
{
return device.Modes.size() == 0;
}
);
, कुछ भी सूची से हटा दिया जा रहा है।
मैंने यहां कितनी गलती की है?
संपादित करें: पी:
आह ठीक है, मेरी गलती मैं MyDisplayDevices.remove_if बजाय का उपयोग करना चाहिए था std :: remove_if की, फिर भी नीचे जवाब std :: remove_if के उपयोग के लिए सही हैं।
MyDisplayDevices.remove_if([](DisplayDevice3d const & device)
{
return device.Modes.size() == 0;
});
कंटेनर ही remove_if तब तक हर तरह इसका इस्तेमाल का समर्थन करता है। मेरा मानना है कि यह std :: सूची के साथ मामला है।कंटेनरों के लिए, जो remove_if की पेशकश नहीं करते हैं, आप कंटेनर के मिट सदस्य फ़ंक्शन के साथ संयोजन में std :: remove_if का उपयोग कर सकते हैं। – sellibitze
@sellibitze दूसरे शब्दों में, चूहे के जहर – bobobobo
[वेक्टर से तत्वों को मिटाकर] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – bobobobo