2008-11-19 5 views
17

के साथ कैसे सम्मिलित करते हैं मैं सी ++ में एसटीएल सूची में कुछ डालना चाहता हूं, लेकिन मेरे पास केवल एक रिवर्स इटेटरेटर है। इसे पूरा करने का सामान्य तरीका क्या है?आप एक रिवर्स_इटरेटर

यह काम करता है: (निश्चित रूप से यह होता है)

std::list<int> l; 
std::list<int>::iterator forward = l.begin(); 
l.insert(forward, 5); 

यह काम नहीं करता: (? क्या मैं बजाय क्या करना चाहिए)

std::list<int> l; 
std::list<int>::reverse_iterator reverse = l.rbegin(); 
l.insert(reverse, 10); 

उत्तर

20

l.insert(reverse.base(), 10); सम्मिलित करेंगे '10' के अंत में , 'रिवर्स' इटरेटर की आपकी परिभाषा दी गई है। दरअसल, l.rbegin().base() == l.end()

6

अनिवार्य रूप से, आप नहीं करते हैं। टीसीपीपीपीएल में 19.2.5 देखें।

रिवर्स_इटरेटर के पास आधार() नामक एक सदस्य होता है जो "नियमित" पुनरावर्तक लौटाएगा। तो निम्नलिखित कोड आपके उदाहरण में काम करेगा:

l.insert (reverse.base(), 10);

सावधान रहें क्योंकि बेस() विधि ऑर्गेनिक रिवर्स_इटरेटर ने इंगित करने के बाद तत्व को वापस कर दिया है। (ऐसा इसलिए है कि rbegin() और rend() पर सही रिवर्स_इटरेटर्स सही ढंग से काम करते हैं।)

संबंधित मुद्दे