मैंने वर्ग ए
में एक std: vector
के उदाहरण संग्रहीत किए हैं , vec_A
के रूप में vec_A.push_back (A (i))
। कोड नीचे दिखाया गया है
अब, मैं किसी अन्य वेक्टर या किसी अन्य सरणी में वर्ग ए
(में vec_A
) के कुछ उदाहरणों को संदर्भित करना चाहता हूं। उदाहरण के लिए, यदि A.getNumber ()
4, 7, 2 देता है, तो मैं एक सूचक को उस आवृत्ति में संग्रहीत करना चाहता हूं एक और सदिश, कहते हैं std: vector & lt; a * & gt; Filtered_A
या एक सरणी।
क्या कोई मुझे बोना सकता है कि यह कैसे करें ?? धन्यवाद!
वर्ग ए {सार्वजनिक: int getNumber (); ए (इंट वैल); ~ एक () {}; निजी: पूर्णांक संख्या; }; ए :: ए (इंट वैल) {num = val; }; Int a :: getNumber () {लौटने के लिए num; }; Int main () {int i = 0; Int num; std :: वेक्टर & lt; a & gt; vec_A; के लिए (i = 0; i & lt; 10; i ++) {vec_A.push_back (ए (आई)); } Std :: cout & lt; & lt; "\ N जारी रखने के लिए रिटर्न को दबाएं ..."; std :: cin.get (); वापसी 0; }
मुझे लगता है कि सबसे सुरक्षित बात करने के लिए एक दूसरा सदिश होता है जिसमें अनुक्रमित पहला सदिश:
<पूर्व> std :: vector का उपयोग कर; वेक्टर & lt; a & gt; मुख्य; वेक्टर के & lt; वेक्टर & lt; a & gt; :: size_type & gt; माध्यमिक; main.push_back (...); Secondary.push_back (main.size () - 1); // अंतिम आइटम का सूचक जोड़ें
अब, वह आइटम देखने के लिए जिसे आप मूल्य को माध्यमिक में लेते हैं और मुख्य में अनुक्रमणिका में उपयोग करते हैं:
मुख्य [माध्यमिक [...]];
इसका कारण यह है कि मैं सिग्नल स्टोअर को सीधे पॉइंटर के बजाय इसकी सलाह देता हूं कि जब भी आप वेक्टर में जोड़ते हैं, तो सदिश का आकार बदलना पड़ सकता है जो किसी भी मौजूदा पॉइंटर्स को अमान्य कर सकता है:
<पूर्व> std :: vector का उपयोग कर; वेक्टर & lt; a & gt; vec; vec.push_back (ए ()); // आइटम में एक पॉइंटर प्राप्त करें, आपने अभी * ए 0 p0 = & amp; vec [0]; // एक और आइटम जोड़ें a.push_back (ए ()); // क्योंकि पुश_बैक () वेक्टर का आकार बदलने का कारण हो सकता है, p0 संभवतया वैध मेमोरी के लिए कोई लंबा संकेत नहीं हो सकता है और सुरक्षित रूप से
Comments
Post a Comment