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

Popular posts from this blog

winforms - C# Form - Property Change -

java - Messages from .properties file do not display UTF-8 characters -

javascript - amcharts makechart not working -