2010-08-31 14 views
8

मैं दो वर्गों A और B है, और एक अंतर्निहित रूपांतरण ऑपरेटर अन्य एक से जाने के लिए मौजूद है, तो यह है कि:कंटेनर <Type1> से कंटेनर <Type2> में कनवर्ट करने का कोई मानक तरीका है?

A a; 
B b; 
b = a; // Works 

वहाँ एक मानक तरीका एक std::list<B> करने के लिए एक std::list<A> कन्वर्ट करने के लिए है? (या std::vector<A> से std::list<B> तक)।

मुझे पता है कि मैं सूची में गड़बड़ी कर सकता हूं और आइटम द्वारा दूसरी सूची वस्तु का निर्माण कर सकता हूं, लेकिन मुझे आश्चर्य है कि क्या एक और अधिक सुरुचिपूर्ण समाधान है।

दुर्भाग्य मैं boost उपयोग नहीं कर सकते, लेकिन एक बोनस सवाल के रूप में जिज्ञासा से बाहर, अगर बढ़ावा इस संभाल कर सकते हैं, मैं खुश भी पता है कि कैसे होगा।

+0

मुझे लगता है कि इससे पहले पूछा जाना चाहिए था, लेकिन मुझे यह नहीं मिला। – ereOn

उत्तर

15

ठीक है, हाँ। प्रत्येक अनुक्रम कंटेनर प्रकार में एक टेम्पलेट कन्स्ट्रक्टर होता है जो इनपुट के रूप में इटरेटर (एक इटरेटर रेंज) की एक जोड़ी लेता है। अनुक्रम तत्वों के प्रकार एक दूसरे के रूप में परिवर्तनीय होने तक, अनुक्रम प्रकारों के बावजूद इसका उपयोग एक अनुक्रम का निर्माण करने के लिए किया जा सकता है। जैसा उदाहरण के लिए

std::vector<A> v; 
... 
std::list<B> l(v.begin(), v.end()); 

इसके अलावा अनुक्रम कंटेनर assign सदस्य समारोह जो (के रूप में अर्थ विज्ञान आरंभीकरण के खिलाफ) असाइनमेंट अर्थ विज्ञान के साथ एक ही बात करता है।

std::vector<A> v; 
std::list<B> l; 
... 
l.assign(v.begin(), v.end()); // replaces the contents of `l` 
+0

मुझे विश्वास नहीं है कि यह इतना आसान था। और मुझे विश्वास नहीं है कि मैंने इसके बारे में सोचा नहीं था। बहुत धन्यवाद;) – ereOn

+0

यदि कोई प्रकार बी प्रकार में परिवर्तनीय नहीं है, तो व्यवहार क्या होना चाहिए? – bjskishore123

+0

जो भी आप कर रहे हैं, उसके आधार पर, और सूची का मालिक कौन है, std :: प्रतिलिपि संभवतः एक इंसर्टर इटरेटर –

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