मैं इस दो वर्गोंसी ++, कॉपी कन्स्ट्रक्टर में std :: vector <Class *> की सही ढंग से प्रतिलिपि कैसे करें?
// This is generic data structure containing some binary data
class A {
public:
A();
A(const A&);
~A();
}
// Main data container
class B {
public:
B();
B(const B&);
~B();
protected:
std::vector<A *> data;
}
// Copy constructor for class b
B::B(const B& orig):data() {
for(std::vector<A *>::const_iterator it = orig.data.begin();
it < orig.data.end(); ++it){
data.push_back(new A(*(*it)));
}
}
मुझे लगता है कि इस वर्ग में यह काम करना होगा उपयोग कर रहा हूँ, लेकिन मैं जिस तरह से कि यह कैसे में कुल पूर्णता तक पहुँचने के लिए करने के लिए लग रहा हूँ।
पहले :data()
पर - क्या यह प्रारंभिकरण खाली वेक्टर को सही ढंग से शुरू करने के लिए आवश्यक है (और यह एक अच्छा और साफ कोड लिखने का हिस्सा है)?
कॉपी कन्स्ट्रक्टर में vector::iterator
का उपयोग कैसे करें, मुझे मिला एकमात्र तरीका है जिसे मैंने कोड में लिखा है (प्रतिलिपि प्रतिलिपि के लिए अनिवार्य होना चाहिए)।
केवल वेक्टर की प्रतिलिपि सिर्फ सूचक मूल्यों की प्रतिलिपि करेगा, न कि पूरे ऑब्जेक्ट्स?
और अंत में नया डेटा प्रारंभिकरण ... क्या कोई तरीका है कि मैं पूरे लूप को कोड के छोटे टुकड़े से कैसे बदल सकता हूं और/या कोई मानक है कि std :: कंटेनर के लिए प्रतिलिपि बनाने वाले को कैसे लिखना है जिसमें ऑब्जेक्ट पॉइंटर्स हैं?
उप प्रश्न: मैं (, बिजली तय करने के लिए (नहीं) वस्तुओं कॉपी करने के लिए ... हर बार की नकल नहीं) का उपयोग कर vector<A *>
और अधिक उपयुक्त और बस vector<A>
से विभिन्न कारणों के लिए प्रभावी है यह सोचते हैं रहा हूँ
क्या आपका मतलब "उप प्रश्न: मैं पॉइंटर्स के वेक्टर का उपयोग कर रहा हूं ..." –
प्रारंभकर्ता सूची में 'डेटा' को पूर्वस्थापित करें।' Push_back() 'का उपयोग करना बहुत अप्रभावी है। – lapk
उप उत्तर: मुझे लगता है कि अगर आप पॉइंटर्स का उपयोग नहीं करते हैं, तो आप उन्हें उपयोग नहीं करते हैं। – Lol4t0