Manipulating a vector array with a C++ void function -


मेरे प्रोग्राम में मेरे पास एक सरणी " vector & lt; vector & lt; double & gt; & gt; रूपो " है 3 पंक्तियों और कॉलम की एक मनमाना संख्या Nconv प्रत्येक स्तंभ आकार के साथ समूह से 2 व्यक्तियों के बीच संभावित बातचीत का प्रतिनिधित्व करता है N , और दूसरा & amp; प्रत्येक कॉलम में 3 जी कक्षों में एक विशेष व्यक्ति को लेबलिंग वाला नंबर होता है।

इसलिए मैंने इस सरणी के माध्यम से चक्र का एक छोटा सा अनुभाग लिखा है और प्रत्येक कॉलम को एक अद्वितीय जोड़ी के साथ पूर्णांक जैसे भरता है।

कोमो [i] [2] = 1 2 3 2 3

कोमोस [i] [1] = 0 0 0 1 1 .... और इसी तरह।

< P> कोड मैं काम के लिए लिखा है, लेकिन मेरे int main () में बाहर जाने के लिए बहुत गन्दा है, और यह शायद बाहरी कार्यों का उपयोग करने के लिए अच्छा अभ्यास है।

< P> मेरी समस्या यह है कि जब मैं अपने मुख्य कोड में फ़ंक्शन insertpairs को कॉल करता हूं, तो कुछ भी नहीं होता ... क्या कोई मुझे बताएगा कि मैं यहाँ याद कर रहा हूं?

  #include & lt; iostream & gt; #include & lt; vector & gt; नेमस्पेस एसटीडी का उपयोग करना; Std :: vector का उपयोग कर; शून्य डाट पेयर (वेक्टर और लेफ्टिनेंट; वेक्टर & lt; डबल & gt; & gt; रूपो, इंट एनकॉन्व, इंट एन) {इंट ए (0), बी, सी (0); जबकि (c & lt; Nconv) {b = a + 1; जबकि (बी एंड एलटी; एन) {कोमोस [सी] [1] = ए; कॉन्मोज [सी] [2] = बी; ख ++; c ++; } A ++; }} Int main () {int N (4), Nconv; वेक्टर के & lt; वेक्टर & LT; डबल & gt; & Gt; convos; Nconv = 0; (इंट आई = 1; आई & lt; = N; i ++) के लिए {Nconv = Nconv + N-i; } // एन। डाटपैरस पर आधारित संभव कॉन्वोस की संख्या की गणना (रूपो, एनकॉन, एन); // ब्रेकपॉइंट यहां ..... // कोड जारी है, लेकिन बाकी प्रासंगिक नहीं है }  

अगर मैं शून्य फ़ंक्शन के अंदर ब्रेकपॉइंट डालता हूं तो मैं देख सकता हूँ कि यह सही तरीके से काम कर रहा है, हालांकि जब यह सरणी convos में सभी मान समाप्त करता है तो बस शून्य करने के लिए यह क्यों है?

वेक्टर नहीं बदलता है क्योंकि आप इसे मान से पास करते हैं:

  शून्य सम्मिलित पेड़ (वेक्टर और लेफ्टिनेंट; वेक्टर और लेफ्टिनिअंस; डबल & gt; & gt; रूपो, इंट एनकॉन्व, इंट एन)  

इसका अर्थ है कि वेक्टर को एक वैरिएबल में कॉपी किया जाएगा जो स्थानीय है समारोह में परिवर्तन उस प्रति पर किया जाता है और फ़ंक्शन रिटर्न के बाद इसे नष्ट कर दिया जाता है। संदर्भ से सदिश को पास करना आवश्यक है:

<पूर्व> शून्य सम्मिलित पेड़ (वेक्टर और लेफ्टिनेंट; वेक्टर & lt; डबल & gt; & gt; और amp; कॉन्वोस, इंट एनकॉन्व, इंट एन)

अंतर के अधिक स्पष्टीकरण के लिए इसे देखें।

जब तक मैं गलत नहीं हूँ, आप एक खाली सदिश पास करते हैं और उसमें मूल्य जोड़ते हैं? उस स्थिति में, किसी भी सदिश को पास नहीं करना बल्कि इसके बजाय एक नया एक बनाना आसान हो सकता है:

  vector & lt; vector & lt; double & gt; बनानेपैड (इंट एनकॉन्व, इंट एन) {वेक्टर & lt; वेक्टर & lt; डबल & gt; जोड़े; // अब युग्म जोड़े जोड़ते हैं; }  

और मुख्य में:

  वेक्टर & lt; वेक्टर & lt; डबल & gt; & Gt; कॉन्मोज = पेंटपैरर्स (एनकॉनवी, एन);  

Comments