c++ - Simple vector initialization in C++11 returns weird error -
कोड का यह टुकड़ा संकलित करना:
#include & lt; vector & gt; लंबे समय तक समऑफमिडीयन (इंट बी, इंट एमयूएल, इंट एड, इंट एन, इंट क) {std :: vector & lt; int & gt; ओपन स्कूल {एन + 2,0}; के लिए (इंट आई = 0; आई & lt; एन; आई ++) {if (i == 0) संख्या [i] = बीज; अन्य नहीं [आई] = (संख्या [आई-1] * एमयूएल + जोड़)% 65536; }} Int main () {sumOfMedians (3,1,1,10,3); वापसी 0; }
एक त्रुटि का कारण बनता है
*** `/ / a.out 'में त्रुटि: मुक्त (): अमान्य अगले आकार (तेज़): 0x00000000006e8010 *** [2] 31743 एबर्ट (कोर डंप किया गया) ./a.out
थोड़ी देर में वेक्टर आरंभीकरण लाइन (पिछले कोड में पंक्ति 5) को बदलते हुए (नया 5,6 लाइन में) कोड)
#include & lt; vector & gt; लंबे समय तक समऑफमिडीयन (इंट बी, इंट एमयूएल, इंट एड, इंट एन, इंट क) {std :: vector & lt; int & gt; ओपन स्कूल; nos.resize (N + 2,0); के लिए (इंट आई = 0; आई & lt; एन; आई ++) {if (i == 0) संख्या [i] = बीज; अन्य नहीं [आई] = (संख्या [आई-1] * एमयूएल + जोड़)% 65536; }} Int main () {sumOfMedians (3,1,1,10,3); वापसी 0; }
इसे सफलतापूर्वक संकलित करने का कारण बनता है क्या देता है?
जी ++ पैरामीटर: -स्टडी = सी ++ 11
के लिए वेक्टर
, ब्रेस-इनिशियलाइज़ेशन प्रारंभकर्ता सूची की सामग्री के लिए वेक्टर सामग्री को प्रारंभ करता है, इसलिए
std :: vector & lt; int & gt; ओपन स्कूल {एन + 2,0};
तत्वों N + 2
और 0
के साथ, इसे 2 के आकार में आरंभ करता है। यह कन्स्ट्रक्टर का उपयोग करता है जो कि std :: initializer_list
के एक पैरामीटर का उपयोग करता है।
कोष्ठकों को ब्रेसिज़ बदलने के कारण यह दो-तर्क कन्स्ट्रक्टर का उपयोग करता है जो आकार निर्दिष्ट करता है और सभी तत्वों के लिए प्रारंभिक मान वही है जो आप यहां चाहते हैं; हालांकि आप दूसरी तर्क छोड़ सकते हैं क्योंकि तत्व मूलभूत रूप से शून्य-प्रारंभिक रूप से आरंभ करते हैं।
Comments
Post a Comment