मेरे पास एक सूची इटेटरेटर है जो एक सूची के माध्यम से जाता है और सभी संख्याओं को हटा देता है। मैं संख्याओं को ठीक से मुद्रित करने के लिए सूची इटरेटर का उपयोग कर सकता हूं लेकिन मैं सूची के निकालने() का उपयोग नहीं कर सकता और dereferenced iterator में पास कर सकता हूं।सूची Iterator निकालें()
मैंने देखा कि जब हटाएं() कथन प्रभावी है, * यह दूषित हो जाता है? क्या कोई इसे समझा सकता है?
#include <iostream>
#include <list>
#define MAX 100
using namespace std;
int main()
{
list<int> listA;
list<int>::iterator itr;
//create list of 0 to 100
for(int i=0; i<=MAX; i++)
listA.push_back(i);
//remove even numbers
for(itr = listA.begin(); itr != listA.end(); ++itr)
{
if (*itr % 2 == 0)
{
cout << *itr << endl;
listA.remove(*itr); //comment this line out and it will print properly
}
}
}
मुझे यह इंगित करना चाहिए कि एसटीएल इटरेटर्स की संरचना की लंबाई पर कोई निर्भरता नहीं है। Iterators अक्सर आपको कुछ तत्वों को हटाने की अनुमति देते हैं, उदाहरण के लिए वेक्टर इटरेटर आपको इटरेटर के पीछे की वस्तुओं को हटाने की अनुमति देते हैं, और हेटरेटर की सूची आपको इटरेटर –