मैं कोड है कि इस तरह दिखता है मिल गया है:क्या आप इसके माध्यम से std :: सूची से तत्वों को हटा सकते हैं?
for (std::list<item*>::iterator i=items.begin();i!=items.end();i++)
{
bool isActive = (*i)->update();
//if (!isActive)
// items.remove(*i);
//else
other_code_involving(*i);
}
items.remove_if(CheckItemNotActive);
मैं, निष्क्रिय आइटम के तुरंत बाद उन्हें अपडेट हटाने inorder सूची फिर से चलने से बचना चाहते हैं। लेकिन अगर मैं टिप्पणी-आउट लाइन जोड़ता हूं, तो मुझे i++
पर एक त्रुटि मिलती है: "इटेटरेटर सूची बढ़ाना नहीं है"। मैंने कुछ विकल्पों की कोशिश की जो कथन में वृद्धि नहीं हुईं, लेकिन मुझे काम करने के लिए कुछ भी नहीं मिला।
आइटम को हटाने के लिए सबसे अच्छा तरीका क्या है जब आप std :: सूची चल रहे हैं?
सही, एक आकर्षण की तरह काम किया। – AShelly
दरअसल, यह काम करने की गारंटी नहीं है। "मिटाएं (i ++);", हम केवल इतना जानते हैं कि पूर्व-वृद्धिित मान मिटाया जाता है(), और मुझे सेमी-कोलन से पहले बढ़ाया जाता है, कॉल को मिटाए जाने से पहले जरूरी नहीं है()। "iterator prev = i ++; मिटाएं (पिछला);" काम करना सुनिश्चित है, जैसा रिटर्न वैल्यू –
कोई जेम्स नहीं है, मुझे मिटाने से पहले बढ़ाया गया है, और पिछला मान फ़ंक्शन पर पास हो गया है। फ़ंक्शन कहने से पहले फ़ंक्शन के तर्कों का पूर्ण मूल्यांकन किया जाना चाहिए। –